我有一个应用程序,它链接到我们自己的库并提升 date_time,两者都使用 libc++(使用 clang)。
运行应用程序时,它会立即停止在 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$ 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++:
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)
可能是什么问题呢?