Ошибка сегментации при использовании общей библиотеки - PullRequest
2 голосов
/ 11 апреля 2011

Я собираю общую библиотеку на Linux. библиотека ".so" была успешно создана, но когда я попытался связать ее с тестовым приложением (с пустым главным) и запустить исполняемый файл, я получил ошибку сегментации: "Ошибка сегментации (сброшено лечение)"

когда я попытался отладить его с помощью gdb и проверить обратную трассировку, я получил такой вывод:

Program received signal SIGSEGV, Segmentation fault.
0x0073d5df in std::_Rb_tree_decrement(std::_Rb_tree_node_base*) () from /usr/lib/libstdc++.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12.1-4.i686 libgcc-4.4.5-2.fc13.i686 libstdc++-4.4.5-2.fc13.i686 zlib-1.2.3-23.fc12.i686

(gdb) backtrace

#0  0x0073d5df in std::_Rb_tree_decrement(std::_Rb_tree_node_base*) () from /usr/lib/libstdc++.so.6
#1  0x0012d70c in ?? () from /opt/cuda/lib/libcudart.so.3
#2  0x0012df0c in ?? () from /opt/cuda/lib/libcudart.so.3
#3  0x0012c88a in ?? () from /opt/cuda/lib/libcudart.so.3
#4  0x00121435 in __cudaRegisterFatBinary () from /opt/cuda/lib/libcudart.so.3
#5  0x005d7bfd in __sti____cudaRegisterAll_55_tmpxft_00000fe6_00000000_26_MonteCarloPaeo_SM10_cpp1_ii_3a8af011()
    () from libsharedCUFP.so
#6  0x005db40d in __do_global_ctors_aux () from libsharedCUFP.so
#7  0x005a8748 in _init () from libsharedCUFP.so
#8  0x008abd00 in _dl_init_internal () from /lib/ld-linux.so.2
#9  0x0089d88f in _dl_start_user () from /lib/ld-linux.so.2

Я не знаком с отладкой gdb, и я впервые пытаюсь создать общую библиотеку в Linux, но мне кажется, что это как-то связано с динамическим связыванием библиотеки.

Если бы кто-нибудь имел представление об этой ошибке и мог бы мне помочь, я был бы признателен.

1 Ответ

1 голос
/ 11 апреля 2011

Это не имеет ничего общего с динамическими ссылками или общими библиотеками - один из конструкторов в libsharedCUFP.so (я полагаю, это ваша общая библиотека), скорее всего, передает недопустимый адрес функции в libcudart.so, которая аварии.

Вам просто нужно отладить свой код.

...