不能 link 和 boost::locale -- objdump 中的奇怪行为
Cannot link with boost::locale -- strange behavior in objdump
我正在尝试创建一个 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
当我 link 使用这个文件时,我得到一个 «undefined reference to» 错误。虽然,许多其他提升功能按预期工作。
一切都是由我们公司使用的相当复杂的构建系统构建的,所以很遗憾我无法向您展示构建命令。
造成这种奇怪行为的原因是什么?
several functions occur in objdump both as defined and as declared-not-defined
这没什么奇怪的:存档库包含一组对象 (.o
) 文件。这些文件之一定义了函数。其他目标文件引用但不定义它。你可以看到哪个引用是哪个:
nm -A libboost_locale.a | grep posix14create_convert
When I link with this file, I get an «undefined reference to» error.
这很可能是因为您将 libbost_locale
放在 link 行的错误位置。您必须将它放在之后引用该函数的目标文件。关于 linker 如何与归档库一起工作的很好的解释可以在 here. Here is an older (but shorter) explanation.
中找到
我正在尝试创建一个 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
当我 link 使用这个文件时,我得到一个 «undefined reference to» 错误。虽然,许多其他提升功能按预期工作。
一切都是由我们公司使用的相当复杂的构建系统构建的,所以很遗憾我无法向您展示构建命令。
造成这种奇怪行为的原因是什么?
several functions occur in objdump both as defined and as declared-not-defined
这没什么奇怪的:存档库包含一组对象 (.o
) 文件。这些文件之一定义了函数。其他目标文件引用但不定义它。你可以看到哪个引用是哪个:
nm -A libboost_locale.a | grep posix14create_convert
When I link with this file, I get an «undefined reference to» error.
这很可能是因为您将 libbost_locale
放在 link 行的错误位置。您必须将它放在之后引用该函数的目标文件。关于 linker 如何与归档库一起工作的很好的解释可以在 here. Here is an older (but shorter) explanation.