【问题标题】:Cannot link with boost::locale -- strange behavior in objdump无法与 boost::locale 链接——objdump 中的奇怪行为
【发布时间】:2015-03-16 11:12:16
【问题描述】:

我正在尝试创建一个 boost::locale 的静态库并看到一个奇怪的行为:在 objdump 中出现了几个已定义和声明未定义的函数(这里是其中之一):

$ objdump -t libboost_locale.a | grep posix14create_convert
00000000000000a3 g     F .text  0000000000000335 _ZN5boost6locale10impl_posix14create_convertERKSt6localeNS_10shared_ptrIP15__locale_structEEj
0000000000000000         *UND*  0000000000000000 _ZN5boost6locale10impl_posix14create_convertERKSt6localeNS_10shared_ptrIP15__locale_structEEj

当我链接到这个文件时,我得到一个“未定义的引用”错误。虽然,许多其他的 boost 函数都按预期工作。

一切都是由我们公司使用的相当复杂的构建系统构建的,所以很遗憾我无法向您展示构建命令。

这种奇怪行为的原因是什么?

【问题讨论】:

    标签: c++ boost linker


    【解决方案1】:

    在 objdump 中出现了一些定义和声明未定义的函数

    这并不奇怪:存档库包含一组对象 (.o) 文件。这些文件之一定义了函数。其他目标文件引用但未定义它。您可以通过以下方式查看哪个参考:

    nm -A libboost_locale.a | grep posix14create_convert
    

    当我链接到这个文件时,我得到一个“未定义的引用”错误。

    这很可能是因为您将libbost_locale 放在了链接行的错误位置。您必须将它放在引用该函数的目标文件之后。 here 很好地解释了链接器如何与存档库一起工作。这是一个较旧(但较短)的explanation。

    【讨论】:

      猜你喜欢
      • 2016-12-11
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多