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

时间:2013-09-08 03:44:34

标签: c++ linker mingw static-libraries ar

假设我的应用程序中需要libA.a。 libA.a需要libB.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

1 个答案:

答案 0 :(得分:0)

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

抱歉延迟:)