C++ 我如何取回c++;0x/c++;11使用Xcode 4.6.2至7.1.1支持Mac OS X 10.6部署
我在项目中大量使用c++0x/c++11特性,特别是代码块和共享指针。当我将操作系统升级到10.8 Mountain Lion(编辑:从10.7开始)时,我被迫升级Xcode。在升级XCODEL时,我失去了编译我的C++项目在10.6个系统上部署的能力,因为我得到以下错误。C++ 我如何取回c++;0x/c++;11使用Xcode 4.6.2至7.1.1支持Mac OS X 10.6部署,c++,c++11,osx-snow-leopard,xcode4.6,libc++,C++,C++11,Osx Snow Leopard,Xcode4.6,Libc++,我在项目中大量使用c++0x/c++11特性,特别是代码块和共享指针。当我将操作系统升级到10.8 Mountain Lion(编辑:从10.7开始)时,我被迫升级Xcode。在升级XCODEL时,我失去了编译我的C++项目在10.6个系统上部署的能力,因为我得到以下错误。 clang:error:-stdlib=libc++的部署目标无效(需要Mac OS X 10.7或更高版本) 看来苹果正试图通过不允许开发者支持雪豹来迫使人们升级。这让我很生气。啊 我能做什么 编辑:经过多次反复评论后,应
clang:error:-stdlib=libc++的部署目标无效(需要Mac OS X 10.7或更高版本)
看来苹果正试图通过不允许开发者支持雪豹来迫使人们升级。这让我很生气。啊
我能做什么
编辑:经过多次反复评论后,应该明确指出10.6不随system libc++库提供。因此,仅仅能够为10.6部署构建一个libc++项目是不够的。您还需要在10.6发行版中包含libc++二进制文件或静态链接到它们。所以让我们继续假设我已经在这么做了
更新1:此问题最初用于Xcode 4.5.2(问题提出时的最新版本)。我已经升级到Xcode 4.6.3,并更新了问题和答案以反映这一点
更新2:我已经升级到Xcode 5.0.2。下面所选答案中列出的技术仍能正常工作
更新3:我已经升级到Xcode 5.1。下面答案中列出的技术还不适用于此版本
更新4:我已经升级到Xcode 6.0.1。下面所选答案中列出的技术似乎再次起作用
更新5:我已经升级到Xcode 7.1.1。下面所选答案中列出的技术似乎再次发挥作用,但有一个重要的警告。由于开源LLVM版本不支持(也不应该支持),因此必须禁用用于AppThinging的。因此,您需要在开源和Apple LLVM clang之间切换,以便为10.6和tvOS/watchOS进行编译(因为这些操作系统都需要位编码)。苹果决定只在10.7或更高版本上正式支持libc++。因此,Xcode附带的clang/llvm版本会检查部署目标在使用libc++时是否设置为10.6,并阻止您编译。但是,此标志未包含在clang/llvm的开源版本中 看看这条线: 因此,要编译使用c++11进行10.6部署的项目,需要为Xcode提供开放源代码版本。以下是一种方法:
注:LLVM 3.4和3.5.0的Mac OS X二进制文件在www.LLVM.org/releases/download.html上被列为“Clang for Darwin 10.9”,而不是在以前的版本中被列为“Clang binaries for Mac OS X”。虽然Xcode 4.5.X是OS X 10.8上的当前默认版本,但您可以拥有其他旧版本的Xcode,例如,只要您有权访问他们的安装程序。您需要确保将每个安装到一个唯一的目录中。另外,您不能或不应该做的一件事是将旧Xcode的
命令行工具
组件或安装程序包安装到10.8系统上,即不要安装到/usr
或/system/Library
。您可以使用xcodebuild
、xcode-select
和xcrun
命令行工具访问非默认的xcode组件。有关更多信息,请参见他们的man
页面。旧版本的Xcode可用于
更新:根据你随后的评论,我相信我没有抓住问题的重点,而且你已经回答了你自己的问题。我想你是说你从10.7升级到了10.8,而不是像我想象的那样从10.6升级到10.8。在最初的问题中,您也没有明确表示您正在使用自己的应用程序分发自己版本的苹果libc++
和10.7版的好友。苹果公司在Xcode中做这样的事情并不容易,因为长期以来,苹果公司的政策是不鼓励静态链接libs或分发重复libs(在某些情况下可能违反许可条款)。这一政策有很好的理由
归根结底,libc++
仅仅是sh