对将静态 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中文网其他相关文章!