在 C 中,使用自定义 malloc/free 库重载 new 和 delete 运算符可能会导致将静态库与 C 代码组合时出现链接错误。尽管确保了正确的链接顺序,但由于名称重整,可能会出现未定义的引用错误。
C 编译器使用称为名称重整的机制,该机制会修改函数名称以包含参数和参数等详细信息返回类型。这确保了具有不同签名的重载函数可以在程序中共存。
将静态 C 库与 C 代码链接时,链接器需要来自库的函数名称以匹配 C 编译器生成的损坏名称。但是,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中文网其他相关文章!