g ++链接器问题

时间:2011-06-22 10:55:49

标签: c++ g++

我试图理解C ++中的关键字extern,并编写了一个简短的代码来概述其含义。不幸的是我做错了什么

bla.h

int bla = 4;

TEST.CPP

#include <iostream>

using namespace std;

int main() {
       extern int bla;
       cout << bla << endl;
}

g++ -o test bla.h test.cpp
/tmp/ccED67jz.o: In function `main':
test.cpp:(.text+0xa): undefined reference to `bla'
collect2: ld returned 1 exit status

3 个答案:

答案 0 :(得分:4)

extern,您描述的用法仅适用于全局变量:

bla.cpp

int bla = 4;

TEST.CPP

#include <iostream>

extern int bla; // use the global from bla.cpp as a global in this file

int main(int argc, char *argv[]) {
    std::cout << bla << "\n";
    return 0;
} 

答案 1 :(得分:1)

更像这样使用它。

TEST.CPP

extern int bla;

int main(int argc, char** argv)
{
    cout << bla << endl;
    return 0;
}

other.cpp

int bla;
  

g ++ test.cpp other.cpp

基本上,extern用于使编译器将外部变量链接到另一个目标文件中。那可能是另一个源文件,甚至是外部库。它也只适用于全局变量。

答案 2 :(得分:1)

  • 永远不要在标题中定义变量(这是你应该使用extern的地方)
  • 从不声明本地外部变量,这些变量总是全局的,并且在本地声明它们会导致混淆

extern的意思是:不要在这里创建变量,它已经存在于其他地方。 “其他”部分表示不同的编译单元。

例如:

file1.c中

int x;

file2.c中

extern int x; /* x already exists in file1.c */

int main()
{
    x = 10;
}

像这样编译:

gcc file1.c file2.c