使用共享库时出现分段错误

时间:2011-04-11 01:13:09

标签: linux g++ segmentation-fault shared-libraries dynamic-linking

我在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 个答案:

答案 0 :(得分:1)

它与动态链接或共享库没有任何关系 - libsharedCUFP.so中的一个构造函数(我假设这是你的共享库)很可能将非法地址传递给libcudart.so中的函数。崩溃。

您只需要调试代码。