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

标签 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 编译的。

最佳答案

当调用 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/

相关文章:

c++ - 类 Veins::VeinsInetManager 未找到

c++ - 分配二维可变大小的数组

c++ - C++ 中成员的枚举成员,或替代

c++ - 无法跟踪 Linux 中的内存泄漏

c++ - 除以 0 是编译器错误或运行时错误

linux - Unix 如何阻止 unix/linux `wall` 消息传递?

c - Writing a GlusterFS Translator - 关于这个的任何文档?

node.js - NVM:使用 nvm install 命令拒绝获取权限

c - 为什么我们在 Linux 中需要 .so.1 文件?

linux - 如何使用 `waitpid()` 处理程序在主程序中调用 `SIGCHLD` 设置的插件中安全地使用 `wait()`