我的测试用例有两个文件:
抄送:
#include <iostream>
using namespace std;
const string program_name("myprog");
b.cc:
#include <iostream>
using namespace std;
extern const string program_name;
int main(int argc, char **argv) {
cout << program_name << endl;
return 0;
}
编译时,我得到以下输出:
$ g++ -c a.cc -o a.o -std=c++11 -O2
$ g++ -c b.cc -o b.o -std=c++11 -O2
$ g++ a.o b.o -o case
b.o: In function `main':
b.cc:(.text.startup+0x7): undefined reference to `program_name'
collect2: error: ld returned 1 exit status
在 a.o 中,我有以下符号:
0000000000000018 b _ZL12program_name
在 b.o 中:
U program_name
问题是:为什么我要搬起石头砸自己的脚?
注意:g++ 4.9.1
最佳答案
好一个。这一切都归功于 const
关键字。
它已经在 stackoverflow 上:[click]
让我引用一下:
It's because const implies internal linkage by default, so your "definition" isn't visible outside of the translation unit where it appears.
关于c++ - 最小 "extern"使用测试用例的未定义引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25828312/