You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:30:10