我在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上构建共享库,但在我看来它与库动态链接有关。
如果有人对这个错误有任何想法并且可以帮助我,我将不胜感激。
答案 0 :(得分:1)
它与动态链接或共享库没有任何关系 - libsharedCUFP.so中的一个构造函数(我假设这是你的共享库)很可能将非法地址传递给libcudart.so中的函数。崩溃。
您只需要调试代码。