2011-08-29 99 views
1

我正在寫一個用c編寫的小工具,並且遇到了我目前不知道如何解決的分割錯誤。運行在GDB給了我下面的提示:缺少strlen_sse4.S導致分割錯誤

 

    Program received signal SIGSEGV, Segmentation fault. 
    __strlen_sse42() at ../sysdeps/x86_64/multiarch/strlen-sse4.S:32 
    ../sysdeps/x86_64/multiarch/strlen-sse4.S: File or Directory not found 
    in ../sysdeps/x86_64/multiarch/strlen-sse4.S 
    (gdb) bt 
    0 __strlen_sse42() at ../sysdeps/x86_64/multiarch/strlen-sse4.S:32 
    1 0x00007ffff764fed8 in strdup_and_subst_obj() from /usr/lib/libgvc.so.5 
    2 0x00007ffff7650631 in make_label() from /usr/lib/libgvc.so.5 
    3 0x00007ffff765a6d1 in common_init_node_opt() from /usr/lib/libgvc.so.5 
    4 0x00007ffff309d700 in dot_init_node_edge() from 
    usr/lib/graphviz/libgvplugin_dot_layout.so.6 
    5 0x00007ffff309dcd8 in dot_layout() from /usr/lib/graphviz/libgvplugin_dot_layout.so.6 
    6 0x00007ffff7633a94 in gvLayoutJobs() from /usr/lib/libgvc.so.5 
    7 0x00007ffff7639425 in gvLayout() from /usr/lib/libgvc.so.5 
    8 0x0000000000400eef in main() 

我會說:我失去了我的系統上或在我的可執行特定的依賴關係(的Ubuntu 11.04 64位)將被用於任何意見非常感謝:]

我目前使用:

GCC(Ubuntu的/ Linaro的4.5.2-8ubuntu4)4.5.2

編輯:

 
(gdb) info registers 

    rax   0x6380e0 6521056 
    rbx   0x62dc14 6478868 
    rcx   0x0 0 
    rdx   0x0 0 
    rsi   0x639770 6526832 
    rdi   0x0 0 
    rbp   0x639770 0x639770 
    rsp   0x7fffffffd358 0x7fffffffd358 
    r8    0x0 0 
    r9    0x0 0 
    r10   0x7fffffffd140 140737488343360 
    r11   0x7ffff764fda0 140737343978912 
    r12   0x62dc14 6478868 
    r13   0x639770 6526832 
    r14   0x0 0 
    r15   0x7ffff7671d85 140737344118149 
    rip   0x7ffff6d7d49f 0x7ffff6d7d49f 
    eflags   0x10246 [ PF ZF IF RF ] 
    cs    0x33 51 
    ss    0x2b 43 
    ds    0x0 0 
    es    0x0 0 
    fs    0x0 0 
    gs    0x0 0 
+1

猜測:您的硬件不支持您的程序似乎使用的SSE4。你可以給你編譯的行嗎? – Nobody

+0

它可能是。也許它也是一個與我使用的庫(libgraphviz)有關的問題,因爲我沒有明確地調用sse4的api或我的程序中的任何其他SIMD parallization。 似乎由標準ubuntu存儲庫管理的libgraphviz的當前版本取決於此說明進行了一些優化。但我不知道它的內部是如何組織的。 – Ruun

+1

glibc-2.14的strlen-sse4.S中的FWIW行32是'pcmpeqb(%rdi),%xmm1',它只是一個SSE2指令。 OTOH是該函數訪問字符串的第一個位置。你可以在崩潰站點轉儲寄存器並將其附加到你的文章('info registers')? – user786653

回答

2

分段錯誤通常是一個空指針解引用。鑑於libc非常穩定,您很可能需要使用調試符號重新編譯您的程序,並獲取libgvc的Ubuntu軟件包的調試版本。

「Missing strlen_sse4.S」只是調試器抱怨它無法找到該文件來爲您提供崩潰站點的列表。您只需要獲取glibc源的副本來檢查文件。

+0

啊,我明白了:所以它只是抱怨調試符號丟失的問題的進一步細節。好的,我會按照這個提示。 – Ruun

+0

我現在已經發現了我的問題,而且確實如此。我沒有可能使用我的庫的給定的API,它導致空指針解引用。 在我之前的評論中,由於Boost提到的問題是一個完全不同的問題,因爲它運行在一個更簡單的程序中,具有相同的功能。 – Ruun

相關問題