问题描述:Linux平台上C++调用C库进行make编译时报undefined reference to "funcxxx"错误,错误实例如下:
/usr/bin/ld: CMakeFiles/dialog.dir/widgets/widget.cpp.o: in function `Widget::loadVerificationModule()':
/home/zhangxiang1209/dev/src/widgets/widget.cpp:211: undefined reference to `ReadChkDataT(int, unsigned char*, unsigned char*)'
/usr/bin/ld: /home/zhangxiang1209/dev/src/widgets/widget.cpp:231: undefined reference to `ReadChkDataPFT(int, unsigned char*, unsigned char*)'
问题分析: 在C++代码中调用C代码,需要确保C++编译器以C的方式链接这些函数,此处需要使用 extern "C"
告诉编译器这部分代码应该按照C语言的规则进行链接。
解决方法:在引用C库头文件或者调用的库函数时使用extern "C"进行包裹,示例如下:
# 包裹头文件 -- 无需一一指定所调用的C库函数,推荐使用
extern "C"
{#include "clib_func.h"
}# 包裹C库函数 -- 需要一一指定所调用的所有C库函数,不推荐使用
extern "C"
{void ReadChkDataT(int, unsigned char*, unsigned char*);
}