2011-05-06 2 views
0

나는 5.3 및 gcc 4.2.4에서 application.so를 사용합니다. Application.so는 boost : asio를 사용합니다. example.c는 application.so에 대해 dlopen과 dlclose를 수행합니다. 그러나 example.c가 종료되면 코어 덤프가 발생합니다. 모든 작업이 성공적으로 수행됩니다.부스트 : asio 및 dlclose() - 코어 덤프 (불법 명령어)

application.so에서 boost 관련 코드를 주석 처리하고 여전히 application.so를 빌드하는 동안 boost_system.so를 링크하면 example.c를 종료 할 때 여전히 코어 덤프가 발생합니다. 그러나 application.so를 빌드하는 동안 boost_system.so를 연결하지 않으면 example.c를 종료 할 때 코어 덤프가 발생하지 않습니다.

나는 boost_1_40, boost_1_42, boost_1_45 및 gcc 4.2.0을 시도했습니다. 전에이 문제를 본 사람이 있습니까? 그렇다면 어떤 도움이라도 대단히 감사하겠습니다.

{ 
hLib = dlopen(libPath, RTLD_LAZY | RTLD_GLOBAL); 
fprintf(stderr, "Before dlclose"); 
dlclose(hLib); 
} 

위의 세그먼트는 문제가 발생한 부분입니다. example.c가 종료 되 자마자 코어 덤프가 발생합니다.

편집

부스트 시스템과 application.so 구축 할 때, 나는 다음과 같은 경고 무엇입니까

: -

ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::error_info_injector<boost::system::system_error>::~error_info_injector

ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::~clone_impl()

ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::~clone_impl()

ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::clone() const

ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::rethrow() const

ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::error_info_injector<boost::system::system_error>::~error_info_injector::system_error> >::~clone_impl()

ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system:

ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::~clone_impl()

ld: 0711-224 WARNING: Duplicate symbol: .global destructors keyed to ras_arg_t

ld: 0711-224 WARNING: Duplicate symbol: .global constructors keyed to ras_arg_t

나는이 DUPL 가정하고 destlructor는 dlclose 중에 호출되지 않지만 exit 중에는 라이브러리가 언로드됩니다.

+0

. 문제를 재현하는 샘플 코드를 게시 할 수 있습니까? –

+0

@ Sam. 아니, AIX에서는 아니고 Linux에서는 볼 수 있습니다. 문제를 일으키는 격리 된 블록을 게시했습니다. – confused

+0

문제를 보여주는'application.so'의 최소한의 예제 코드를 게시 할 수 있습니까? –

답변

0

내가 부스트를 사용하지 않는,하지만 AIX 5.3-5 및 GCC 4.2.0를 사용하고, 그리고 코어 덤프를 경험하고

"ld: 0711-224 WARNING: Duplicate symbol: .global constructors keyed to ras_arg_t" 

연결 경고.

내 문제에 대한 답이 여기에 설명 된 thread_credentials 경우와 유사하다 /usr/include/sys/ras.h

ras_arg 구조체 정의 전에 단어 typedef을 추가했다 : 나는 리눅스에서이 동작을 보지 못했다 http://www.ibm.com/developerworks/forums/thread.jspa?threadID=119546