我的项目使用 10.6SDK 编译并选择 10.5 作为部署目标。当我在 10.5 leopard 系统中运行二进制文件时,它给了我
未找到符号:__ZNKSt13bad_exception4whatEV
引用自:...... 预期在:/usr/lib/libstdc++.6.dylib
有时我遇到了同样的问题,我关闭了使用 boost header 来解决问题,但这是临时解决方案。为什么会这样?如果这个符号不在 10.5 系统中,为什么它编译没有问题?
我什至找不到哪个库调用这个符号(可能是提升,但在哪里?)
编辑:
我找到了罪人。thread.o 编译文件调用__ZNKSt13bad_exception4whatEV 这个符号。我已将 boost 库从 1.46 更新到 1.53。在我遇到同样的问题并且我已经改变之前:
#include <boost/thread.hpp>
至
#include <boost/thread/thread.hpp>
问题就消失了。现在,当我将 boost 更新到 1.53 时,它又来了。
我用 macports 或 b2 编译了 boost。
otool -L bin.v2/libs/thread/build/darwin-4.2.1/release/address-model-32_64/macosx-version-min-10.4/macosx-version-10.8/threading-multi/libboost_thread.dylib
bin.v2/libs/thread/build/darwin-4.2.1/release/address-model-32_64/macosx-version-min-10.4/macosx-version-10.8/threading-multi/libboost_thread.dylib:
libboost_thread.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_system.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
我还是看到了/usr/lib/libstdc++.6.dylib
。这意味着它与 10.5 不兼容。
我还寻找了与 libstdc++ 的静态链接的解决方案,但我找不到它。
我仍在寻找解决方案。
编辑2:
我想我放弃了。我没有更多时间处理这种荒谬的情况。我不明白为什么 Apple 不为 10.5 leopard 系统提供更新的 libstdc++。10.5 中的 libstdc++ 存在很多问题。
主要问题为什么 Xcode 没有告诉我这个二进制文件与 10.5 系统不兼容?
Windows 在向后兼容性方面做得更好。现在,我什至可以为 xp sp3 编译。
我在 Windows 中总是使用静态链接,但在 Apple 中这是不可能的。
这一刻我了解到,如果我想使用c++11的特性,我必须为10.7系统编译。甚至对于 10.6 系统也不行。但是在Professional Audio这么多人用的还是10.6系统。由于 Apple 的非静态链接情况或 Aplle 的向后兼容方法,我不得不等待使用 c++11。
是的,我有点生气!