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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-23 14:53:32206浏览

How to Resolve

对将静态 C 库与 C 代码链接时的错误的未定义引用

当尝试将静态 C 库与 C 代码链接时,您可能会遇到以下问题:尽管修改了链接顺序,但仍遇到“未定义的引用”错误。此问题是由 C 和 C 编译创建的不同符号名称(称为“名称修饰”)引起的。

在 C 中,链接器在错误消息中显示分解的符号名称,这可能会造成混淆。使用“nm -u”检查目标文件(*.o)发现引用的符号名称与库中的符号名称不匹配。

为了解决此问题,将使用使用C 编译器必须将其函数声明括在“extern "C" {}”块中。这会抑制块内所有内容的 C 名称修改。

例如:

<code class="cpp">extern "C" {
    #include <dual/xalloc.h>
    #include <dual/xmalloc.h>
}</code>

或者,您可以将函数声明包装在头文件中,如下所示:

<code class="cpp">#if defined (__cplusplus)
extern "C" {
#endif

/*
 * Put plain C function declarations here ...
 */

#if defined (__cplusplus)
}
#endif</code>

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

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