gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:48:55 28 4
gpt4 key购买 nike

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

当我链接到这个文件时,我得到一个«undefined reference to»错误。虽然,许多其他 boost 功能按预期工作。

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

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

最佳答案

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 放在链接行的错误位置。您必须将它放在引用该函数的目标文件之后。关于链接器如何与归档库一起工作的很好的解释可以在 here 中找到。 .这是一个较旧(但较短)的 explanation .

关于c++ - 无法与 boost::locale 链接——objdump 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28007829/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com