<C++中调用C函数,会提示undefined reference to xxx,collect2: error: ld returned 1 exit status>

  在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

posted @ 2024-11-06 14:34  一个不知道干嘛的小萌新  阅读(27)  评论(0编辑  收藏  举报