Problem
我最近将构建环境升级到了 Xcode 6.1.1,在 OS X 10.9 上运行,现在我无法在 OS X Leopard 10.5 下再次运行我的应用程序。
对于目标来说,Base SDK被设定为操作系统 X 10.6, and OS X 部署目标被设定为操作系统 X 10.5。检查构建日志显示这些设置正在进入编译和链接阶段(以mmacosx-version-min=10.5
, export MACOSX_DEPLOYMENT_TARGET=10.5
, etc.)
但是,当我在 OS X 10.5 下运行该应用程序时,它立即崩溃并出现错误:
Dyld Error Message:
Symbol not found: __ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv
Referenced from: /[path]/[Application Name].app/Contents/MacOS/[Application Name]
Expected in: /usr/lib/libstdc++.6.dylib
到目前为止我尝试过的
深入研究后发现,在 OS X 10.9 上,/usr/lib/libstdc++.6.dylib
是版本 6.0.9 的链接,在 OS X 10.5 上,它是版本 6.0.4 的链接。
关于 SO 的其他问题表明答案是在应用程序包中包含所需版本的 libstdc++.6.dylib 的副本,并使用以下命令将动态链接器指向它install_name_tool
.
所以我运行命令:
install_name_tool -change /usr/lib/libstdc++.6.dylib @executable_path/libstdc++.6.dylib [Application Name].app/Contents/MacOS/[Application Name]
And otool -L [Application Name].app/Contents/MacOS/[Application Name]
现在报告:
@executable_path/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
I copy /usr/lib/libstdc++.6.0.9.dylib
到该地点[Application Name].app/Contents/MacOS/libstdc++.6.dylib
并将应用程序复制到部署计算机上并获取...
Dyld Error Message:
Symbol not found: __ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv
Referenced from: /[path]/[Application Name].app/Contents/MacOS/[Application Name]
Expected in: /usr/lib/libstdc++.6.dylib
...完全相同的错误消息。
Running otool -L
在部署计算机上的应用程序上确认链接到libstdc++.6.dylib
仍然指向下面的路径@executable_path
我设置的install_name_tool
.
那么为什么动态链接器会忽略由install_name_tool
仍在寻找/usr/lib
?
这是问题的正确解决方案吗?