c++ - 最小 "extern"使用测试用例的未定义​​引用问题

标签 c++ linker extern

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

抄送:

#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/

相关文章:

c++ - 为什么 "using namespace xxx"对模板函数不生效?

c++ - QVector 不追加!

c++ - 使用 extern 关键字在头文件/c++ 中声明变量

c++ - cmake 和 libcxx 的链接器错误

gcc - 为什么针对已安装的glibc编译的程序不能正常运行?

c++ - 在全局变量的 header 和源中使用 "extern int x"中的 extern 关键字是否正确?

c - 为什么要使用 `extern void my_func();` 而不是包括 `my_utils.h` ?

c++ - 定义用于 volatile 和非 volatile 对象的例程

多重定义的 C 链接错误

c++ - extern 关键字不同于 c 到 c++?