-->

我该如何找回的C ++ 0x / C ++ 11使用的Xcode 4.6.2通7.1.1的Mac O

2019-07-18 15:30发布

我大量使用的C ++ 0x / C ++ 11层的功能在我的项目,尤其是代码块和共享指针。 当我升级我的OS 10.8山狮(编辑:10.7),我被迫升级的Xcode。 在升级Xcode中,我失去了我的编译的C ++项目部署上的10.6系统,我得到以下错误的能力。

clang: error: invalid deployment target for -stdlib=libc++ (requires Mac OS X 10.7 or later)

看来,苹果正试图迫使人们不由允许开发人员支持雪豹升级。 这让我很生气。 Arrrggg!

我能做什么?

编辑:经过多次意见来回,应该明确指出,10.6不符合系统附带的libc ++库。 其结果是,只要能够建立一个的libc ++项目10.6部署是不够的。 您还需要包括的libc ++二进制与10.6分配或静态链接到他们。 所以让我们继续,我已经这样做的前提。

更新1:这个问题最初是用于在Xcode 4.5.2(在有人问时的最新版本)使用。 因为我已经升级到4.6.3的Xcode和更新了提示问题和答案,以反映。

更新2:因为我已经升级到5.0.2的Xcode。 在选择的答案下面还列出了技术按预期工作。

更新3:因为我已经升级到5.1的Xcode。 在回答中列出的技术下面还没有对这个版本的工作!

更新4:因为我已经升级到6.0.1的Xcode。 下面所选择的答案中所列的技术似乎可以正常工作了。

更新5:因为我已经升级到7.1.1的Xcode。 下面所选择的答案中所列的技术似乎可以正常工作了,有一个重要的警告。 您必须禁用Bitcoding用于AppThinning因为开源LLVM版本不支持它(也不应该)。 所以,你需要开源和苹果LLVM铛之间进行切换,以编译详尽10.6和tvOS / watchOS(因为Bitcoding需要的操作系统)。

Answer 1:

苹果已经决定只正式支持在10.7或更高版本的libc ++。 所以铛/ LLVM附带Xcode中检查是否使用的libc ++时部署目标为10.6设定,并阻止您编译的版本。 然而,这个标志包含在铛/ LLVM的开源版本。

看看这个线程: http://permalink.gmane.org/gmane.comp.compilers.clang.devel/17557

因此,要编译使用C ++ 11 10.6部署一个项目,你需要给Xcode的开源版本。 下面是做这件事的一种方式:

  1. 从这里下载铛的开源版本(使用LLVM 3.1的Xcode 4.5.x;使用LLVM 3.2的Xcode 4.6.X;使用LLVM 3.3的Xcode 5.0.x的;使用LLVM 3.5.0用于XCode的6.0.1;使用LLVM 3.7.0的XCode 7.1.1): http://llvm.org/releases/download.html
  2. 让Xcode的默认铛编译器的备份,并把它放在一个安全的地方,这是位于(如果你搞砸了!):/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
  3. 与您下载的一个替换默认铛编译器[1]
  4. CHOWN铛二进制根:轮具有sudo chown root:wheel clang从中列出的bin目录[2]。
  5. 启动Xcode和编译!

更新#1:该技术目前不为的Xcode 5.1或更高版本,这依赖于LLVM 3.4工作。 当我得到更多的时间,我会尽量找到一个解决方案张贴在这里。 但是,如果有人过来跟我之前的解决方案,就应该将它张贴作为一个答案。

更新#2:不幸的是我不记得如果我找到了一个解决方案的Xcode 5.1,但是我可以确认的是,技术并仍然Xcode的6.0.1工作。 我还没有较新版本的测试,但它仍然可以正常工作。

更新#3:这项技术似乎仍然使用LLVM 3.7.0的XCode 7.1.1运行。 然而,开源LLVM铛不支持Bitcoding。 所以,你需要开源编译器和苹果的编译器之间进行切换,以发展为两个10.6和tvOS / watchOS(需要Bitcoding)。

PS:对于LLVM 3.4和3.5.0的Mac OS X的二进制文件在www.llvm.org/releases/download.html而不是像以前的版本“锵二进制的Mac OS X”列为“锵达尔文10.9”。



Answer 2:

虽然Xcode的4.5.x是在OS X 10.8当前的默认版本,你可以有其他的,旧版本的Xcode,如的Xcode 3.2.6 OS X 10.6,10.8可用的 ,只要你有机会获得他们的安装。 你需要确保你安装每一个唯一的目录。 此外,有一件事你不能或不应该做的是安装Command Line Tools年长Xcodes的组件或安装程序包到您的10.8系统,即不进/usr/System/Library 。 您可以使用xcodebuildxcode-selectxcrun命令行工具来访问非Xcode默认组件。 看到自己的man页面获取更多信息。 Xcode中的旧版本可供注册用户developer.apple.com的

更新:根据您的意见以后,我相信我也错过了问题的要点,并认为你已经回答了你自己的问题。 我想你说的是,你从10.6我以为升级从10.7 10.8,而不是10.8。 您还没有做在你发布你自己的苹果版本的原来的问题清楚libc++从10.7自己的应用程序和朋友。 苹果不会使它容易在Xcode做这样的事情,因为它一直是苹果公司的政策,以阻止静态链接库用或分发重复库(在某些情况下可能会违反许可条款)。 有充分的理由对这一政策。

底线是libc++仅随OS X 10.7或更高的系统。 从来就没有苹果的支持libc++的10.6,所以它的误导说它已被删除。 如果你要提供一个应用程序,是在10.6和更高版本的系统部署依赖libc++ ,最安全的方法是建立自己的铛/ LLVM和libc++针对OS X 10.6,并用它来构建项目。 有多种方法可以做到这一点,也许最简单的就是使用MacPorts的版本,并设置部署目标在MacPorts的10.6。 或者从头开始自己全部建立它。 但修改在Xcode 4.5铛编译器是一个坏主意。 而抄袭苹果库一个的应用程序通常是一个坏主意。

如果您有适合您的解决方案,极大的。 但我不会把它推荐给别人。



文章来源: How do I get back c++0x/c++11 support for Mac OS X 10.6 deployment using Xcode 4.6.2 thru 7.1.1