我正在寫一個用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
猜測:您的硬件不支持您的程序似乎使用的SSE4。你可以給你編譯的行嗎? – Nobody
它可能是。也許它也是一個與我使用的庫(libgraphviz)有關的問題,因爲我沒有明確地調用sse4的api或我的程序中的任何其他SIMD parallization。 似乎由標準ubuntu存儲庫管理的libgraphviz的當前版本取決於此說明進行了一些優化。但我不知道它的內部是如何組織的。 – Ruun
glibc-2.14的strlen-sse4.S中的FWIW行32是'pcmpeqb(%rdi),%xmm1',它只是一個SSE2指令。 OTOH是該函數訪問字符串的第一個位置。你可以在崩潰站點轉儲寄存器並將其附加到你的文章('info registers')? – user786653