【发布时间】:2014-09-13 22:24:35
【问题描述】:
我的测试用例有两个文件:
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
【问题讨论】: