我能够成功构建代码,但是在尝试运行它时出现以下错误。我正在使用 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 ++不兼容。
答案 0 :(得分:1)
问题出在libstdc ++。默认情况下,LIBPATH
设置为opt/freeware/lib
,其中libstdc++
可用。在编译时,我的源代码已链接到位于“ opt / freeware / lib”位置的libstdc ++。在运行时,它正在gcc4.8.5中寻找可用的“ libstdc ++”。引起问题。
将LIBPATH设置为gcc lib
目录解决了该问题。