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

undefined Reference to "_ZNSt5__padIcSt11char_traitsIcEE6_S_padERSt8ios_basecPcPKcllb" symbol is not exported from libstdc++.a(libstdc++.so.6)

我能够成功构建我的代码,但在尝试 运行 时出现以下错误。我在 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++。当我 link 到系统 libstdc++ gdb 运行s 成功但我的程序失败但是当我在 gcc4.8.5 中设置 libstdc++ 的路径时。 GDB 没有 运行 但我的可执行文件 运行。似乎系统 libstdc++ 和 gcc4.8.5 libstdc++ 不兼容。

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

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