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

使用extern跨C文件引用函数和变量时遇undefined reference错误

解决extern引用时的"undefined reference to"错误

错误原因

这是链接器错误,不是编译错误。extern关键字仅用于告诉编译器「该变量/函数的定义存在于其他源文件中」,但链接器需要找到对应的目标文件(.o)才能将引用与实际定义关联。单独编译文件2时,链接器找不到文件1中count和increment()的实体定义,因此抛出错误。另外,你的两个源文件都包含main()函数,这会导致后续链接时出现「multiple definition of main」的新问题,必须删除其中一个(建议删除文件1的main())。

解决步骤

方法1:一次性编译链接所有源文件

假设文件1名为file1.c,文件2名为file2.c,使用gcc编译器执行以下命令:

gcc file1.c file2.c -o my_program

执行后会生成可执行文件my_program,直接运行即可。

方法2:分步编译再链接

  1. 分别将两个源文件编译为目标文件:
gcc -c file1.c -o file1.o
gcc -c file2.c -o file2.o
  1. 将两个目标文件链接为可执行文件:
gcc file1.o file2.o -o my_program

修正后的代码示例

修正后的file1.c(删除多余的main函数)

#include <stdio.h>

int count = 0;
int increment() 
{
    count = count + 1;
    printf("%d", count);
    return count;
}

file2.c(无需修改)

#include <stdio.h>

extern int increment();
extern int count;

int main() 
{
    int value;
    value = increment();
    value = count + 3;
    return 0;
}

内容的提问来源于stack exchange,提问作者maSter gaMe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:47:23