我正在编写一个小学生项目,并遇到了一个问题,即我有一些全局变量并且需要在一些源文件中使用它,但是我收到错误 undefined reference to variable_name 。让我们创建三个源文件,例如:
tst1.h:
extern int global_a;
void Init();
tst1.cpp:
#include "tst1.h"
void Init(){
global_a = 1;
}
tst2.cpp:
#include "tst1.h"
int main(){
Init();
}
当我编译和链接时,这就是我得到的:
$ g++ -c tst1.cpp
$ g++ -c tst2.cpp
$ g++ tst2.o tst1.o
tst1.o: In function `Init()':
tst1.cpp:(.text+0x6): undefined reference to `global_a'
collect2: error: ld returned 1 exit status
如果我删除 extern 语句,那么我会遇到另一个问题,让我展示一下:
$ g++ -c tst1.cpp
$ g++ -c tst2.cpp
$ g++ tst2.o tst1.o
tst1.o:(.bss+0x0): multiple definition of `global_a'
tst2.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
我真的需要一些全局变量,例如我的小项目使用汇编代码,并且有一个像 string rax = “%rax %eax %ax %ah %al”; 这样的变量。应该通过不同的源文件引用。
那么,如何正确初始化全局变量呢?
原文由 Hi-Angel 发布,翻译遵循 CC BY-SA 4.0 许可协议
您只声明了变量但没有定义它。这个记录
是声明而不是定义。要定义它,您可以在任何模块中编写
或者最好通过以下方式定义函数 init
并在 main 函数之前的 main 模块中编写