C编译报错:undefined reference to 'adjacency_array' 求助
解决
adjacency_array未定义引用的链接错误 这个错误是链接器抛出的,不是编译阶段的问题——意思是linked_list.c编译时能通过globals.h里的extern声明识别变量,但链接的时候找不到adjacency_array的实际定义(也就是你在main.c里写的那个实例)。下面是排查和解决的步骤:
检查编译命令是否包含所有必要的目标文件
如果你是手动用gcc编译,别只单独编译linked_list.c,必须把main.o也加入链接步骤。比如正确的命令应该是:# 先分别编译每个源文件生成目标文件 gcc -c main.c -o main.o gcc -c linked_list.c -o linked_list.o # 再把所有目标文件链接成可执行程序 gcc main.o linked_list.o -o your_program_name如果用Makefile,确保所有相关的
.o文件都被列在链接规则的依赖里。确认
main.c成功编译生成了main.o
去你的编译输出目录看看有没有main.o文件。如果main.c本身有编译错误(比如语法问题、new_dynamic_array未定义之类的),就不会生成目标文件,链接器自然找不到变量的定义。核对变量名和类型的一致性
仔细检查:globals.h里的extern Dynamic_Array *adjacency_array和main.c里的Dynamic_Array *adjacency_array变量名完全一致(C语言区分大小写,别写错大小写或下划线)Dynamic_Array的定义在data_types.h里,确保main.c和linked_list.c都正确包含了这个头文件,而且两个文件里的Dynamic_Array定义完全相同(别在某个文件里重新定义了同名的结构体)
检查
main.c里的变量有没有加static
如果你给main.c里的adjacency_array加了static修饰,这个变量的作用域就被限制在main.c内部了,外部文件通过extern也访问不到,直接去掉static就行。
内容的提问来源于stack exchange,提问作者szmoli
相关产品推荐
相关产品推荐

