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

时间:2018-12-10 09:40:30

标签: c++ linker aix libstdc++ gcc4.8

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

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 ++不兼容。

1 个答案:

答案 0 :(得分:1)

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

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