我的测试用例有两个文件:
a.cc:
#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
答案 0 :(得分:2)