【问题标题】:Undefined reference error when I use a c++ merged static library使用 c++ 合并静态库时出现未定义的引用错误
【发布时间】:2013-09-08 03:44:33
【问题描述】:

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

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

这里是合并命令:

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

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

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

【问题讨论】:

  • 8 小时内我无法回答自己的问题!所以我必须在这里发布我的解决方案:似乎我找到了解决方案!我在合并的 .a 文件中将 .o 和 .a 文件混合在一起(目标文件 + 静态库)。我做了 ar-x 来提取 .a 文件的内容,然后我将所有 .o 文件合并到一个最终的 merge.a 库中。
  • 现在已经8个多小时了,所以我认为你应该正确回答你自己的问题:-)

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


【解决方案1】:

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

抱歉耽搁了:)

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    相关资源
    最近更新 更多