【问题标题】:Strange symbol lookup error in libstdc++libstdc++ 中出现奇怪的符号查找错误
【发布时间】:2012-03-13 19:07:13
【问题描述】:

试图在 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 编译的。

【问题讨论】:

  • 您的进程是否可以动态加载符号?在这种情况下,内存损坏可能是此类垃圾的原因。你试过valgrind吗?
  • @Jonas:嗯,我的 代码没有。我不知道 OpenMPI/Boost::MPI 是否可以。运行 Valgrind 的问题在于,仅调用 MPI_Init_Thread 就会产生大约 25,000 个错误,因此很难知道其中是否有任何一个是原因。

标签: c++ linux


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2016-04-20
    • 1970-01-01
    相关资源
    最近更新 更多