centos 5에서 boost, pthread를 포함해서 static link를 하면 계속 segfault가 발생 하더라고요.

centos6, ubuntu13 에서는 문제없이 실행이 잘 됩니다.

서비스용으로 centos5를 사용하고 있어서 삽실을 시작 했습니다.-_-


gdb내용을 보면...

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? () (gdb) bt 
#0 0x00000000 in ?? ()
#1 0x080a4adf in __cxa_guard_release ()
#2 0x0804a867 in asio::system_category () at /root/asio-1.5.3/include/asio/impl/error_code.ipp:85 
#3 0x0804a895 in asio::error::get_system_category () at /root/asio-1.5.3/include/asio/error.hpp:214 
#4 0x0804832c in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at /root/asio-1.5.3/include/asio/error.hpp:242 
#5 0x0804850b in global constructors keyed to main() () at client.cpp:60 #6 0x0812891b in __do_global_ctors_aux () 
#7 0x08048109 in _init ()
#8 0x080b8882 in __libc_csu_init ()
#9 0x080b8261 in __libc_start_main () 
#10 0x08048131 in _start ()


objdump 내용.

80a4a90 <__cxa_guard_release>:
80a4a90: 55 push %ebp 
80a4a91: 89 e5 mov %esp,%ebp 
80a4a93: 83 ec 18 sub $0x18,%esp 
80a4a96: 89 5d f8 mov %ebx,0xfffffff8(%ebp) 
80a4a99: e8 a4 fb ff ff call 80a4642 <__i686.get_pc_thunk.bx> 
80a4a9e: 81 c3 6a 62 0c 00 add $0xc626a,%eb 
80a4aa4: 89 75 fc mov %esi,0xfffffffc(%ebp) 
80a4aa7: 8b 75 08 mov 0x8(%ebp),%esi 
80a4aaa: 8b 83 e8 ff ff ff mov 0xffffffe8(%ebx),%eax 
80a4ab0: 85 c0 test %eax,%eax 
80a4ab2: 75 11 jne 80a4ac5 <__cxa_guard_release+0x35> 
80a4ab4: c6 46 01 00 movb $0x0,0x1(%esi) 
80a4ab8: c6 06 01 movb $0x1,(%esi) 
80a4abb: 8b 5d f8 mov 0xfffffff8(%ebp),%ebx 
80a4abe: 8b 75 f mov 0xfffffffc(%ebp),%esi 
80a4ac1: 89 ec mov %ebp,%esp 
80a4ac3: 5d pop %ebp 
80a4ac4: c3 ret 
80a4ac5: e8 76 fd ff ff call 80a4840 <_ZN72_GLOBAL__N_.._.._.._.._libstdc___v3_libsupc___guard. 
80a4aca: c6 46 01 00 movb $0x0,0x1(%esi) 
80a4ace: 8d 83 f8 34 00 00 lea 0x34f8(%ebx),%eax 
80a4ad4: c6 06 01 movb $0x1,(%esi) 
80a4ad7: 89 04 24 mov %eax,(%esp) 
80a4ada: e8 21 b5 f5 f7 call 0 <_nl_current_LC_CTYPE> 
80a4adf: 8b 5d f8 mov 0xfffffff8(%ebp),%ebx 
80a4ae2: 8b 75 fc mov 0xfffffffc(%ebp),%esi 
80a4ae5: 89 ec mov %ebp,%esp 
80a4ae7: 5d pop %ebp 
80a4ae8: e9 83 fd ff ff jmp 80a4870 <_ZN72_GLOBAL__N_.._.._.._.._libstdc___v3_libsupc___guard. 
80a4aed: 90 nop 
80a4aee: 90 nop 
80a4aef: 90 nop



objdump를 해보니 "call 0" 이 있고, 이 부분이 문제가 있어 보여서 더 추적을 했습니다.

__cxa_guard_release 함수는 libsu++에 있는것이고 이건 Libstdc++에 있는 것이라서 libstdc++를 확인 해봤습니다.


libstdc++를 dump 해보니 위 "call 0" 위치에 아래같은 내용이 있네요.

call ae0a24 <pthread_cond_broadcast@plt> 



문제가 뭘까 열심히 찾다가 해결 방법을 찾았습니다.

http://gcc.gnu.org/ml/gcc-help/2010-05/msg00029.html

pthread를 링크할 때 아래처럼 하면 된다네요.

"-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"

위 옵션으로 pthread를 링크 하니 segfault가 없어졌습니다.

이 옵션이 뭔지,, 왜 저런 상황이 발생 하는지는 아직도 정확히 이해는 못하겠네요.. 음


번호 제목 글쓴이 날짜 조회 수
공지 [공지] 컴파일러 및 가상머신 스터디 관련 Q&A 게시판 입니다. woos 2016.04.09 278
29 저희집에서 모이는 건가요? 약도 올립니다. [1] file 이일열 2010.04.09 8488
28 이번 주는 제가 안될것 같습니다.. [1] 김남형 2009.11.04 8890
27 이번주 이사 때문에 참석이 힘들것 같습니다. [2] 백창우 2009.09.02 8979
26 내일 참석이 힘들것 같습니다. [2] 백창우 2009.10.30 9137
25 이번주 어떻게 하는게 좋을까요? [1] 백창우 2009.11.14 9192
24 gcc 스터디 lksas 서버계정 신청... [1] 이수연 2008.11.25 9260
23 죄송합니다. 이정우 2008.11.29 9414
22 소스를 어디서 받을수 있을까요? [2] 박세율 2008.09.12 9439
21 졸업논문 및 ACM 대회로 인하여, 이번주 참석도 힘들것 같습니다. 김승겸 2009.10.24 9477
20 12/20 스터디 정리 [1] 이수연 2008.12.20 9503
19 -finline-small-functions 옵션 문서화 버그 [2] 김남형 2009.09.03 9506
18 GCC 분석 스터디 종료 백창우 2009.12.07 9511
17 그동안 참여하지 못해서 정말 죄송합니다 ㅠㅠ 양주찬 2008.09.03 9600
16 11/29 스터디 정리 [4] 이수연 2008.12.01 9659
15 lksas 계정 알려주세요. [5] 백창우 2008.12.05 9759
14 GCC 스터디 금요일에 있나요? [2] 백창우 2008.11.19 9766
13 분석소스 올려주세요. [2] 백창우 2009.01.01 9790
12 GCC 스터디 잠시 쉽니다. [1] 이수연 2009.02.04 9797
11 GCC 분석 망했나요? 백창우 2008.10.05 9884
10 저도 스터디에 참가하고 싶습니다..... [2] 이준환 2009.04.15 10157
XE Login