对用 C 代码链接静态 C 库时的错误的未定义引用
当尝试用 C 代码链接静态 C 库时,您可以尽管修改了链接顺序,但仍遇到“未定义的引用”错误。此问题是由 C 和 C 编译创建的不同符号名称(称为“名称修饰”)引起的。
在 C 中,链接器在错误消息中显示分解的符号名称,这可能会造成混淆。使用“nm -u”检查目标文件 (*.o) 显示引用的符号名称与库中的符号名称不匹配。
为了解决此问题,将使用使用C 编译器必须将其函数声明括在“extern "C" {}”块中。这会抑制块内所有内容的 C 名称修改。
例如:
extern "C" {
#include
#include
}
或者,您可以将函数声明包装在头文件中,如下所示:
#if defined (__cplusplus)
extern "C" {
#endif
/*
* Put plain C function declarations here ...
*/
#if defined (__cplusplus)
}
#endif
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3