2

在Linux上构建共享库。库“.so”已成功创建,但是当我试图将其链接到测试应用程序(带有空主)并运行可执行文件时,出现了分段错误:“Segmentation error(cure dumped)”使用共享库时的分段错误

when我试着用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

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

你只需要调试你的代码。

+0

实际上在我的共享库中链接CUDA对象(使用NVCC编译),出于某种原因某些功能调用不起作用。我能找到的唯一解决方案是分离cuda文件并将其构建为除.so之外的静态库。无论如何感谢您的帮助。 – user665130 2011-04-16 00:18:44