未从 libstdc++.a(libstdc++.so.6) 导出对“_ZNSt5__padIcSt11char_traitsIcEE6_S_padERSt8ios_basecPcPKcllb”符号的

Posted

技术标签:

【中文标题】未从 libstdc++.a(libstdc++.so.6) 导出对“_ZNSt5__padIcSt11char_traitsIcEE6_S_padERSt8ios_basecPcPKcllb”符号的引用【英文标题】:undefined Reference to "_ZNSt5__padIcSt11char_traitsIcEE6_S_padERSt8ios_basecPcPKcllb" symbol is not exported from libstdc++.a(libstdc++.so.6) 【发布时间】:2019-05-11 04:34:45 【问题描述】:

我能够成功构建我的代码,但在尝试运行它时出现以下错误。我在 AIX7.1 上使用 GCC4.8.5

0509-130 Symbol resolution failed for libadobelinguistic.a because: 0509-136 Symbol _ZNSt5__padIcSt11char_traitsIcEE6_S_padERSt8ios_basecPcPKcllb (number 94) is not exported from dependent module /user/unicore/rs6000aix/compiler/gcc4.8.5/aix6.1/lib/libstdc++.a(libstdc++.so.6). 0509-022 Cannot load module . 0509-026 System error: Cannot run a file that does not have a valid format. 0509-192 Examine .loader section symbols with the 'dump -Tv' command."

正如在几个地方所建议的那样,我使用-Wl,--no-undefined 标志在编译时使项目失败。但编译并没有失败。

解构函数

std::__pad<char, std::char_traits<char> >::_S_pad(std::ios_base&, char, char*, char const*, long, long, bool)

我找不到对这个函数的引用。

此外,在少数地方建议如果出现此类错误,您需要在 AIX 的情况下设置 LIBPATH 变量。我将 libpath 变量设置为

LIBPATH=/user/unicore/rs6000aix/compiler/gcc4.8.5/aix6.1/lib:/opt/freeware/lib:/user/unicore/rs6000aix/compiler/gcc4.8.5/aix6.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.8.5:/opt/freeware/lib/pthread/ppc64

还是不行。

我找到了对它的引用 https://sourceforge.net/p/slo/feature-requests/4/。但它没有帮助。

编辑:似乎 libstdc++ 在 AIX7.1 上引起了问题。我们有 gcc4.8.5 的系统 libstdc++ 和 libstdc++。当我链接到系统 libstdc++ gdb 成功运行但我的程序失败但是当我在 gcc4.8.5 中设置 libstdc++ 的路径时。 GDB 不运行,但我的可执行文件运行。似乎系统 libstdc++ 和 gcc4.8.5 libstdc++ 不兼容。

【问题讨论】:

你从哪里得到这个libadobelinguistic.a文件? 共享位置。强制执行。 linux的相应文件工作正常。使用 gcc4.8.5 的 Linux 机器上没有错误 【参考方案1】:

问题在于 libstdc++。默认情况下,LIBPATH 设置为 opt/freeware/lib,其中 libstdc++ 可用。在编译我的源代码时,链接到了“opt/freeware/lib”位置上可用的 libstdc++。在运行时,它正在寻找 gcc4.8.5 中可用的“libstdc++”。导致问题。

将 LIBPATH 设置为 gcc lib 目录解决了这个问题。

【讨论】:

那么请接受您自己的答案,所以问题还没有解决。

以上是关于未从 libstdc++.a(libstdc++.so.6) 导出对“_ZNSt5__padIcSt11char_traitsIcEE6_S_padERSt8ios_basecPcPKcllb”符号的的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PIC 编译 gnu libstdc++.a?

gcc:查找 libstdc++ 的目录

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

Linux安装aapt问题之libstdc++-4.4.7-16.el6.i686 != libstdc++-4.4.7-11.el6.x86_64

Xcode有关lstdc++报错

无root 修改/usr/lib/x86_64-linux-gnu/libstdc 解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: v