Xcode 无法使在OS X 10.9上构建的应用程序在OS X 10.5上运行 问题
我最近将构建环境升级到Xcode 6.1.1,运行在OS X 10.9上,现在我很难让我的应用程序在OS X Leopard 10.5下再次运行 对于目标,基本SDK设置为OS X 10.6,OS X部署目标设置为OS X 10.5。检查构建日志表明,这些设置正在进入编译和链接阶段(以Xcode 无法使在OS X 10.9上构建的应用程序在OS X 10.5上运行 问题,xcode,macos,linker,osx-leopard,libstdc++,Xcode,Macos,Linker,Osx Leopard,Libstdc++,我最近将构建环境升级到Xcode 6.1.1,运行在OS X 10.9上,现在我很难让我的应用程序在OS X Leopard 10.5下再次运行 对于目标,基本SDK设置为OS X 10.6,OS X部署目标设置为OS X 10.5。检查构建日志表明,这些设置正在进入编译和链接阶段(以mmacosx version min=10.5、export MACOSX\u DEPLOYMENT\u TARGET=10.5等形式) 但是,当我在OS X 10.5下运行应用程序时,它会立即崩溃,并出现以下错
mmacosx version min=10.5
、export MACOSX\u DEPLOYMENT\u TARGET=10.5
等形式)
但是,当我在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\u name\u tool
将动态链接器指向它
所以我运行命令:
install_name_tool -change /usr/lib/libstdc++.6.dylib @executable_path/libstdc++.6.dylib [Application Name].app/Contents/MacOS/[Application Name]
和otool-L[Application Name].app/Contents/MacOS/[Application Name]
现在报告:
@executable_path/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
我将/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
…完全相同的错误消息
在部署计算机上的应用程序上运行otool-L
可以确认指向libstdc++.6.dylib
的链接仍然指向我使用安装\u name\u工具设置的@executable\u path
下的路径
那么,为什么动态链接器忽略了由install\u name\u tool
设置的路径,仍然在/usr/lib
中查找
这是问题的正确解决方案吗?为什么不能使用最新的SDK进行构建?@SevenBits这是一个遗留应用程序,有很多对已从SDK的更高版本中删除的长期不推荐的函数的调用。更新整个应用程序超出了正在准备的小升级的范围。