我在构建用 C++ 编码的可执行文件时遇到了一个奇怪的问题,该可执行文件使用本身依赖于 C 库的 C++ 库。我使用 gcc 编译了构成 C 库的 C 模块,使用 g++ 编译了所有其他源模块。 C 和 C++ 库都是静态库。
当我在 C++ 源代码中包含 C 库中的头文件时,我总是将它包装在 extern "C"中:
extern "C"
{
#include <c-library-header.h>
}
现在奇怪的是链接时会出现“ undefined reference ”错误,但这些会根据我列出库的顺序发生变化:
- 如果我首先列出 C 库,则 C++ 模块引用的该库中的所有符号都显示为“未定义”。
- 如果我首先列出 C++ 库,则 C++ 模块引用的该库中的所有符号都显示为“未定义”。
我本以为在 g++ 命令行上出现静态库的顺序是完全不相关的。有人有任何线索吗?
最佳答案
顺序很重要。
如果 libxxx 依赖于 libyyy,则应首先指定 libxxx,即 -lxxx -lyyy
在不幸的情况下,当两者相互依赖时,一个库可能会被提及两次
-lxxx -lyyy -lxxx
参见:
关于c++ - 混合 C 和 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22825956/