2013-09-24 2 views
0

libC++ (clang 포함)를 사용하여 우리 자신의 라이브러리에 링크하고 date_time을 향상시키는 응용 프로그램이 있습니다.libC++의 심볼이 런타임에 잘못된 라이브러리에서 검색됩니다.

응용 프로그램을 실행할 때 바로 부스트 라이브러리에서 __ZTISt12out_of_range (= "type : std :: out_of_range")를 찾지 않습니다.

bash-3.2$ ./communicator 
dyld: Symbol not found: __ZTISt12out_of_range 
    Referenced from: (...)/../Frameworks/libsipclient.dylib 
    Expected in: (...)/../Frameworks/libboost_date_time-mt.dylib 
in (...)/../Frameworks/libsipclient.dylib 
Trace/BPT trap: 5 

그들은 모두는 정의되지 않은 심볼로 있고, /usr/libc++.1.dylib은 가지고

bash-3.2$ otool -L ../Frameworks/libsipclient.dylib | grep -e libboost -e libc 
     @executable_path/../Frameworks/libboost_date_time-mt.dylib (compatibility version 0.0.0, current version 0.0.0) 
     /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0) 
bash-3.2$ otool -L ../Frameworks/libboost_date_time-mt.dylib 
../Frameworks/libboost_date_time-mt.dylib: 
     @executable_path/../Frameworks/libboost_date_time-mt.dylib (compatibility version 0.0.0, current version 0.0.0) 
     /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0) 
     /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) 
:

bash-3.2$ nm -u ../Frameworks/{libsipclient,libboost_date_time-mt}.dylib | grep __ZTISt12out_of_range 
__ZTISt12out_of_range 
__ZTISt12out_of_range 
bash-3.2$ nm /usr/lib/libc++.1.dylib | grep __ZTISt12out_of_range 
000000000006d5c0 S __ZTISt12out_of_range 

모두 otool에 따라 정확한 경로 ++ libc를 사용

무엇이 문제 일 수 있습니까?

답변

1

libsipclient.dylib는 원래 libC++ 대신 libstdC++에 링크 된 boost :: date_time에 링크되었습니다 (링커 ​​인수는 libC++보다 먼저 경로가 있음).