未定义的引用问题与最小的" extern"用法测试用例

时间:2014-09-13 22:24:35

标签: c++ linker extern

我的测试用例有两个文件:

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

1 个答案:

答案 0 :(得分:2)

好的。这完全归功于const关键字。

它已经在stackoverflow上:[click]

让我引用一下:

  

因为const默认意味着内部链接,所以你的定义&#34;在翻译单元出现之外是不可见的。