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

C++调用外部C库出现undefined reference错误求助

解决C++调用C库时的未定义引用链接错误

你遇到的undefined reference链接错误,本质是编译链接阶段没有包含fake_receiver.c中given_function的实现代码。你的C代码通过extern "C"正确处理了C/C名字修饰差异,但编译器只编译了main.cpp,找不到C函数的二进制实现,所以链接失败。

下面是几种可行的解决方法:

方法1:直接编译所有源文件

用g一次性编译C和C源文件,自动完成编译与链接流程:

g++ main.cpp fake_receiver.c -o my_program

运行生成的程序:

./my_program

方法2:分开编译再链接

如果需要分步处理编译过程,可以先编译C文件生成目标文件,再与C++代码链接:

# 用gcc编译C文件为目标文件(保证遵循C语言编译规则)
gcc -c fake_receiver.c -o fake_receiver.o
# 编译C++文件并链接C目标文件
g++ main.cpp fake_receiver.o -o my_program

方法3:生成静态库再链接(适合C模块复用场景)

如果这个C模块需要被多个项目复用,可以打包成静态库:

# 编译C文件为目标文件
gcc -c fake_receiver.c -o fake_receiver.o
# 创建静态库文件
ar rcs libfake_receiver.a fake_receiver.o
# 链接C++程序与静态库(-L. 指定当前目录为库搜索路径,-lfake_receiver 链接libfake_receiver.a)
g++ main.cpp -L. -lfake_receiver -o my_program

额外说明

你在main.cpp中用extern "C"包裹#include "fake_receiver.h"的写法是正确的,这已经告诉C编译器按照C语言的名字规则处理头文件中的函数声明,避免了C的名字修饰问题,这部分无需修改。

内容的提问来源于stack exchange,提问作者Matteo Possamai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:45:44