【发布时间】:2012-12-14 22:25:23
【问题描述】:
可能重复:
Why does const imply internal linkage in C++, when it doesn’t in C?
What is external linkage and internal linkage in C++
我有两个 C 文件,我正在尝试将它们编译为可执行文件。一个文件只包含一个声明,如下(简化)。
const char *foo[2] = {"thing1", "thing2"};
第二个 c 文件执行此操作
extern const char *foo[2];
main()
{
//Code that does stuff with foo
}
编译时出现链接器错误,提示 foo 是未解析的外部符号。我假设编译器正在优化 foo。这里有什么想法吗?
【问题讨论】:
-
如何编译?您需要链接到包含定义的
.c文件中的目标文件。 -
你用什么命令编译?听起来您只是在编译和链接第二个文件,而不是第一个。
-
首先我分别编译这两个文件(这是我们的make系统这样做的)。然后它会这样做'link.exe file1.obj file2.obj extlib.lib /out:out.exe'
-
@YePhIcK:这是相关的,但 what? 和 why? 是不同的问题。
-
两个链接的答案都不相关。这个问题与 C++ 中
const对象的内部链接无关。上述声明中的对象foo不是const。这些声明的链接行为在 C 和 C++ 之间没有区别。
标签: c visual-studio-2010 visual-c++ linker