libstdc ++中的奇怪符号查找错误

时间:2012-03-13 19:07:14

标签: c++ linux

尝试在MPI的某个地方追踪段错误,我收到了这个错误:

./mpitest: symbol lookup error: /usr/lib64/libstdc++.so.6: bàþ;@ BC_
-------------------------------------------------------------------
mpirun has exited due to process rank 2 with PID 8729 on ...

首先,如果库路径错误,我习惯在加载进程时获取查找错误。但这些都发生在流程开始执行之前。这发生在测试输出的中间。在进程启动之前,运算符加载器是否不能解析所有符号?

其次,该符号看起来像垃圾。它肯定不是一个普通的错误C ++符号。

内存损坏是否可能(因为我正在跟踪一个段错误,很可能会发生类似的事情)来破坏这样的符号?

这是在Linux 2.6.18-194.32.1.el5 x86_64计算机上用icpc 12.0.3 20110309编译的。

1 个答案:

答案 0 :(得分:1)

当调用MPI_INIT时,OpenMPI在运行时将插件作为动态共享对象加载。见FAQ。因此,符号查找在那时发生。因此,在我看来,您的OpenMPI的libmpi_cxx.so是针对不同的libstdc ++构建的,而不是在运行时可用或找到的。在系统上。

您可以重建OpenMPI,或者如果正确的libstdc ++在您的系统上(而不是/usr/lib64/libstdc++.so.6),您可以调整LD_LIBRARY_PATH。另外,尝试设置LD_DEBUG =文件以查看您是否实际加载了2个不同的libstdc ++。