我有一个奇怪的问题,正在构建一个使用C ++库(该库本身依赖于C库)的可执行文件的代码。我使用gcc编译了组成C库的C模块,同时使用g ++编译了所有其他源模块。 C库和C ++库都是静态库。
当我在C ++源代码中包含C库的头文件时,我总是用extern "C"将其包装:
现在的奇怪之处在于链接时出现了“undefined reference”错误,但这些错误会根据我列出库的顺序而改变:
如果先列出C库,那么所有由C++模块引用的库中符号将显示为“未定义”。
如果先列出C++库,那么所有由C++模块引用的库中符号将显示为“未定义”。
我本来认为在g++命令行中静态库出现的顺序是完全无关紧要的。有人有什么线索吗?
当我在C ++源代码中包含C库的头文件时,我总是用extern "C"将其包装:
extern "C"
{
#include <c-library-header.h>
}
现在的奇怪之处在于链接时出现了“undefined reference”错误,但这些错误会根据我列出库的顺序而改变:
如果先列出C库,那么所有由C++模块引用的库中符号将显示为“未定义”。
如果先列出C++库,那么所有由C++模块引用的库中符号将显示为“未定义”。
我本来认为在g++命令行中静态库出现的顺序是完全无关紧要的。有人有什么线索吗?