来自libC++的符号在运行时在错误的库中搜索

问题描述:

我有一个链接到我们自己的库和boost date_time的应用程序,都使用libC++(带有clang)。来自libC++的符号在运行时在错误的库中搜索

运行应用程序时,它立即停止在boost库中寻找__ZTISt12out_of_range(=“typeinfo for 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++用正确的路径

可能是什么问题?

libsipclient.dylib最初被链接到boost :: date_time,该链接到libstdC++而不是libC++(链接器参数的路径早于libC++之一)。