can not find symbol:xxx(C++)
Q:CPP 程序调用 C 函数编译无问题,运行找不到符号?

c++ 中支持函数重载,所以 c 和 c++ 中对同一个函数经过编译后生成的函数名不同,这就会导致一个问题。如果在 c++ 中调用一个使用 c 语言编写模块中的某个函数,c++ 是按照 c++ 的名称修饰方式来查找并链接这个函数,就会发生链接错误。

c函数:void func(),被编译成函数:func
c++函数: void func(){},被编译成函数:_Z4funcv
解决方法:

方法一:
可以在c++test.cpp文件中添加 extern “C”,如下图所示:

方法二:
可以在 C 程序的头文件中对函数进行处理,如下图所示:

更多扩展知识见:
Related Articles
error:expected unqualified-id before string constant extern "C" { ”
Q:Qt 中编译时出现 “expected unqualified-id before string constant extern "C" { ” 错误的原因? 例如编译报错图如下: 其中图上错误指向开源串口库头文件 termios.h ,该文件中在 “ extern "C" { ” 处编译报错,该错误 原因为改文件中可能存在 “;”、“}”、“)” 等括号未匹配或者缺少分号等造成的文件中格式出现问题, 或者为该文件被人为修改替换导致的格式问题。 解决方法: ...
can not find symbol:xxx
问:can not find symbol:xxx 在不使用第三方库时使用 Posix 接口进行线程创建,即调用 posix_create 函数时,程序在系统下运行时显示如 图1 错误,提醒无法找到以上函数的符号。 图 1.报错信息 在初始化函数 API_ThreadInit 中的 _TCBBuild 构建 TCP 属性块函数中有对钩子函数的使用。图2 图 2.报错函数位置 通过源码追踪,发现 Hook 函数并没有进行函数底层实现,且没有编译到 Base 工程的 symbol.ld ...
can not find symbol: _ZN8QWebView6setUrlERK4QUrl
Q:SylixOS 使用 Qt4.8.7 webkit 出现:[ld]Library /apps/xxx/xxx can not find symbol: _ZN8QWebView6setUrlERK4QUrl 错误? QT += core gui QT += webkit QT += webkitwidgets 使用 webkit 中的 webview 功能需要追加 QT += core gui webkit webkitwidgets 更多扩展知识见: 参考文章:找不到符号 can not ...
找不到符号 can not find symbol:xxx 分析之三(库函数未实现)
找不到符号 can not find symbol:xxx 分析之三(库函数未实现) Q:在应用程序中调用了一个第三方的库,编译后没有任何 warning 调用第三方库的函数示例代码如 程序清单 1.1所示。 程序清单 1.1 示例代码 #include <stdio.h> void clientShare(void); int main (int argc, char **argv) { clientShare(); printf("Hello SylixOS!\n"); return ...
找不到符号 can not find symbol:xxx 分析之二(库路径未添加或库未上传)
找不到符号 can not find symbol:xxx 分析之二(库路径未添加或库未上传) Q:使用 RealEvo-IDE(以下简称IDE)开发程序时,在应用程序中调用了一个第三方的库,编译后没有任何 warning 调用第三方库的函数示例代码如 程序清单 1.1所示。 程序清单 1.1 示例代码 #include <stdio.h> void clientShare(void); int main (int argc, char **argv) { clientShare(); ...