2012-03-13 2 views
3

Попытка разыскать Segfault где-то в MPI, я получил эту ошибку:Странная ошибка символ поиска в libstdC++

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

Во-первых, я привык получать ошибки подстановки, когда процесс загрузки, если путь к библиотеке неправильно. Но все это происходит до того, как процесс начинает выполняться. Это произошло в середине результата теста. Должны ли все символы быть разрешены загрузчиком во время выполнения до начала процесса?

Во-вторых, этот символ выглядит как мусор. Это, конечно, не обычный искаженный символ C++.

Возможно ли повреждение памяти (поскольку я отслеживаю segfault, скорее всего, что-то подобное происходит), чтобы испортить символы, подобные этому?

Это было скомпилировано с icpc 12.0.3 20110309 на машине Linux 2.6.18-194.32.1.el5 x86_64.

+0

Возможно ли, что ваш процесс загружает символы динамически? В этом случае причиной такого мусора может быть повреждение памяти. Вы пробовали [valgrind] (http://valgrind.org/)? –

+0

@ Джонас: Ну, ** мой ** код нет. Я не знаю, работает ли OpenMPI/Boost :: MPI. Проблема с запуском Valgrind заключается в том, что просто вызов MPI_Init_Thread дает примерно 25 000 ошибок, поэтому трудно понять, является ли причина этого причиной. – Lutorm

ответ

1

OpenMPI загружает плагины в качестве динамического общего объекта во время выполнения при вызове MPI_INIT. См. Это FAQ. Поэтому поиск символов происходит в это время. Поэтому мне кажется, что libmpi_cxx.so от OpenMPI был создан против другого libstdC++, чем тот, который доступен или найден во время выполнения. в системе.

Вы можете либо перестроить OpenMPI, либо если корректный libstdC++ находится где-то в вашей системе (не /usr/lib64/libstdc++.so.6), вы можете настроить LD_LIBRARY_PATH. Кроме того, попробуйте установить LD_DEBUG = файлы, чтобы увидеть, действительно ли вы загружаете 2 разных libstdC++.

Смежные вопросы