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

试图在MPI中查找段错误,我得到这个错误:

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

首先,如果库path是错误的,我会习惯在加载进程时发现查找错误。 但是这些都是在进程开始执行之前发生的。 这发生在testing输出的中间。 在进程启动之前不应该由运行时加载程序parsing所有符号吗?

其次,那个符号看起来像垃圾。 这当然不是一个正常的错位的C ++符号。

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

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

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

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