无法与boost :: locale链接 - objdump中的奇怪行为

时间:2015-01-18 06:47:13

标签: c++ boost linker

我正在尝试创建一个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

当我链接到这个文件时,我得到一个«未定义的引用»错误。虽然,许多其他人提升功能按预期工作。

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

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

1 个答案:

答案 0 :(得分:1)

  

objdump中出现了几个函数:定义的和声明未定义的

没有什么奇怪的:归档库包含一组对象(.o)文件。其中一个文件定义了该功能。其他目标文件引用但不定义它。你可以看到哪个参考是:

nm -A libboost_locale.a | grep posix14create_convert
  

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

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