我正在学习使用C ++编写代码,并且正在OS X 10.13.1上使用Xcode9.1。在尝试理解关键字extern的使用时,我遇到了以下代码的问题:
extern int foo;
#include <iostream>
int main() {
foo = 7;
std::cout << foo << std::endl;
return 0;
}
运行时导致链接器错误:
Undefined symbols for architecture x86_64:
"_foo", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我不确定为什么链接器找不到foo
,尽管定义是main
中的第一行。
非常感谢您查看我的问题!
答案 0 :(得分:0)
链接器找不到foo
,因为它没有在任何地方定义。通过声明extern int foo
&#39;,您告诉链接器该定义位于其他位置。删除extern
,或在链接器可以找到它的位置定义foo
。
看看这个example on Wikipedia。