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
相关产品推荐
相关产品推荐

