使用extern关键字出现Undefined reference变量错误的问题求助
问题原因与解决办法
首先,这个错误是链接阶段的问题,既不是代码语法错误,也不是编译器故障。
你在file2.c里用extern int a;声明了变量a,意思是告诉编译器“a在其他源文件里已经定义好了”,但你单独运行file2.c的时候,编译器只编译了file2.c这一个文件,根本没把file1.c(里面有a的实际定义)包含到链接过程里,所以链接器找不到a的实体,就报了“undefined reference”错误。
另外还有个隐藏问题:你的两个C文件里都有main()函数,就算把两个文件一起编译,链接器也会报错,因为一个程序只能有一个入口函数main()。
解决步骤:
- 调整代码结构:把
file1.c里的main()函数删掉,只保留全局变量定义,修改后file1.c如下:
#include <stdio.h> // 只保留全局变量定义,作为模块提供变量 int a;
- 同时编译两个文件:在终端里执行命令:
gcc file1.c file2.c -o my_program
- 运行生成的程序:Windows下执行
my_program.exe,就能正常输出1了。
或者分两步编译:
- 先把
file1.c编译成目标文件:gcc -c file1.c,生成file1.o - 再编译
file2.c并链接目标文件:gcc file2.c file1.o -o my_program
这样就能解决链接错误,同时避免多个main()函数的冲突。
内容的提问来源于stack exchange,提问作者Hải Dương Phạm
相关产品推荐
相关产品推荐

