在C++中调用C函数,即使头文件等都包含,编译后提示错误undefined reference to xxx,collect2: error: ld returned 1 exit status。
这是因为C和C++编译过来中,函数的符号表示不一样。在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等.而在C中,只是简单的函数名字而已,不会加入其他的信息.也就是说:C++和C对产生的函数名字的处理是不一样的. 目的就是主要实现C与C++的相互调用问题。
举例:
用strings工具查看一个库,
这种MsgBroker_Release就是C函数的,其他很奇怪的就是C++的函数。
所以函数名称会有所不同,导致即使包含了函数原型的头文件,但是依旧在链接阶段找不到函数。
解决:
参考:https://www.cnblogs.com/zhuangquan/p/17143607.html