【发布时间】:2014-04-03 01:04:03
【问题描述】:
我在构建一个用 C++ 编码的可执行文件时遇到了一个奇怪的问题,该可执行文件使用了一个 C++ 库,该库本身依赖于一个 C 库。我使用 gcc 编译了构成 C 库的 C 模块,并使用 g++ 编译了所有其他源模块。 C 和 C++ 库都是静态库。
当我在 C++ 源代码中包含来自 C 库的头文件时,我总是将它包装在 extern "C" 中:
extern "C"
{
#include <c-library-header.h>
}
现在奇怪的是在链接时出现“未定义的引用”错误,但这些会根据我列出库的顺序而变化:
- 如果我首先列出 C 库,则该库中 C++ 模块引用的所有符号都显示为“未定义”。
- 如果我首先列出 C++ 库,则该库中 C++ 模块引用的所有符号都显示为“未定义”。
我原以为静态库出现在 g++ 命令行上的顺序完全无关紧要。谁有线索?
【问题讨论】: