试图追踪 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 编译的。
最佳答案
当调用 MPI_INIT 时,OpenMPI 在运行时将插件加载为动态共享对象。看这个FAQ .因此符号查找发生在那个时候。所以在我看来,您的 OpenMPI 的 libmpi_cxx.so 是针对不同的 libstdc++ 构建的,而不是在运行时可用或找到的。在系统上。
您可以重建 OpenMPI,或者如果正确的 libstdc++ 位于您系统的某处(不是/usr/lib64/libstdc++.so.6),您可以调整您的 LD_LIBRARY_PATH。此外,尝试设置 LD_DEBUG=files 以查看您是否实际上加载了 2 个不同的 libstdc++。
关于c++ - libstdc++ 中奇怪的符号查找错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9690423/