混合C和C++库

pet*_*ete 4 c c++ gnu

我在构建用C++编码的可执行文件时遇到了一个奇怪的问题,它使用的C++库本身依赖于C库.我使用gcc和使用g ++的所有其他源模块编译了构成C库的C模块.C和C++库都是静态库.

当我在C++源代码中包含来自C库的头文件时,我将其包装在extern"C"中:

extern "C"
{
  #include <c-library-header.h> 
}
Run Code Online (Sandbox Code Playgroud)

现在奇怪的是链接时得到"未定义的引用"错误,但这些错误取决于我列出库的顺序:

  • 如果我首先列出C库,则C++模块引用的该库中的所有符号都显示为"undefined".
  • 如果我首先列出C++库,那么C++模块引用的该库中的所有符号都显示为"undefined".

我本以为在g ++命令行中出现静态库的顺序是完全无关紧要的.有人有任何线索吗?

Aru*_*run 7

订单很重要.

如果libxxx依赖于libyyy,则应首先指定libxxx,即 -lxxx -lyyy

在不幸的情况下,当两者相互依赖时,可以提及两个库

-lxxx -lyyy -lxxx
Run Code Online (Sandbox Code Playgroud)

看到: