当我使用 c++ 合并的静态库时出现未定义的引用错误

Undefined reference error when I use a c++ merged static library

本文关键字:未定义 错误 引用 静态 c++ 合并      更新时间:2023-10-16

假设我的应用程序中需要libA.a.libA.a本身,我需要在我的应用程序中静态链接到它们。为了消除这种情况,我将这两个(libA.a和libB.a)合并为libAB.a(这是使用ar工具完成的)。还没有问题。

当我想运行我的应用程序(链接到libAB.a)时,编译器开始抱怨对libA中使用libB的方法的未定义引用!当我将应用程序链接到libB.a和libAB.a时,一切都很好!根据文件大小,libAB.a 似乎是 libA 和 libB 合并的结果,但在编译时,似乎只有 libA 可供应用程序使用。

这是合并命令:

ar rcus -v ../lib/libPocoFoundationmtd.a @"Foundation.txt" "c:/MinGW/lib/libiphlpapi.a"

Foundation.txt包含一个.o文件列表,这些文件将创建一个.a文件。这是我的应用程序的编译命令:

g++ -o ./Debug/exe1 @"exe1.txt" -L. -Lc:/poco/lib/  -lPocoFoundationmtd

看来我已经找到了解决方案!我将 .o 和 .a 文件混合在一起(对象文件 + 静态库)在合并的 .a 文件中。我做了ar-x来提取.a文件的内容,然后将所有.o文件合并到一个最终合并的.a库中

很抱歉耽误了:)