首页 >后端开发 >C++ >如何解决将静态 C 库与 C 代码链接时出现'未定义引用”错误?

如何解决将静态 C 库与 C 代码链接时出现'未定义引用”错误?

Barbara Streisand
Barbara Streisand原创
2024-12-09 19:33:12329浏览

How to Resolve

将静态 C 库与 C 代码链接:解决“未定义引用”错误

在 C 中,使用自定义 malloc/free 库重载 new 和 delete 运算符可能会导致将静态库与 C 代码组合时出现链接错误。尽管确保了正确的链接顺序,但由于名称重整,可能会出现未定义的引用错误。

了解名称重整

C 编译器使用称为名称重整的机制,该机制会修改函数名称以包含参数和参数等详细信息返回类型。这确保了具有不同签名的重载函数可以在程序中共存。

链接错误问题

将静态 C 库与 C 代码链接时,链接器需要来自库的函数名称以匹配 C 编译器生成的损坏名称。但是,C 编译器不应用名称修改。

解决方案:使用 extern "C"

要解决此问题,请将引用 C 库的函数声明括在 extern "C" 中“ 堵塞。这会抑制块内声明的名称修改,从而允许链接器正确识别函数。

extern "C"
{
    #include "libxmalloc.h"
}

此外,头文件中的函数声明可以像这样包装:

#if defined (__cplusplus)
extern "C" {
#endif

/*
 * Plain C function declarations here ...
 */ 

#if defined (__cplusplus)
}
#endif

通过抑制名称修改,链接器可以在静态库中找到正确的符号定义并解决未定义的引用错误。

以上是如何解决将静态 C 库与 C 代码链接时出现'未定义引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn