我在我的项目中大量使用了 c++0x/c++11 功能,尤其是代码块和共享指针。当我将操作系统升级到 10.8 Mountain Lion(编辑:从 10.7 开始)时,我被迫升级 Xcode。在升级 Xcode 时,我无法编译我的 c++ 项目以部署在 10.6 系统上,因为我收到以下错误。
clang: error: invalid deployment target for -stdlib=libc++(需要 Mac OS X 10.7 或更高版本)
Apple 似乎试图通过不允许开发人员支持 Snow Leopard 来强制人们进行升级。这让我很生气。啊啊啊!!!
我能做什么?
编辑:经过多次反复评论,应该明确指出 10.6 不附带系统 libc++ 库。因此,仅仅能够为 10.6 部署构建一个 libc++ 项目是不够的。您还需要在 10.6 发行版中包含 libc++ 二进制文件或静态链接到它们。因此,让我们继续假设我已经这样做了。
更新 1: 此问题最初旨在用于 Xcode 4.5.2(提出问题时的最新版本)。我已经升级到 Xcode 4.6.3 并更新了问题和答案以反射(reflect)这一点。
更新 2:我已经升级到 Xcode 5.0.2。下面所选答案中列出的技术仍然可以按预期工作。
更新 3:我已经升级到 Xcode 5.1。以下答案中列出的技术尚不适用于此版本!
更新 4:我已经升级到 Xcode 6.0.1。下面所选答案中列出的技术似乎再次起作用。
更新 5:我已经升级到 Xcode 7.1.1。下面所选答案中列出的技术似乎再次起作用,但有一个重要警告。您必须禁用 Bitcoding用于 AppThinning,因为开源 LLVM 版本不支持它(也不应该)。因此,您需要在开源和 Apple LLVM clang 之间切换,以便为 10.6 和 tvOS/watchOS 进行编译(因为这些操作系统需要位编码)。
最佳答案
Apple 已决定仅在 10.7 或更高版本上正式支持 libc++。因此,Xcode 附带的 clang/llvm 版本会在使用 libc++ 时检查部署目标是否设置为 10.6,并阻止您进行编译。但是,此标志不包含在 clang/llvm 的开源版本中。
看看这个线程: http://permalink.gmane.org/gmane.comp.compilers.clang.devel/17557
因此,要编译使用 c++11 进行 10.6 部署的项目,您需要为 Xcode 提供开源版本。这是一种方法:
sudo chown root:wheel clang chown 用于 root:wheel 的 clang 二进制文件。更新 #1:该技术目前不适用于依赖 LLVM 3.4 的 Xcode 5.1 或更高版本。当我有更多时间时,我会尝试找到一个解决方案来在这里发布。但是,如果有人在我之前提出解决方案,他们应该将其发布为答案。
更新 #2:不幸的是,我不记得我是否曾经找到过适用于 Xcode 5.1 的解决方案,但我可以确认该技术仍然适用于 Xcode 6.0.1。我还没有测试过更新的版本,但它仍然可以工作。
更新 #3:这种技术似乎仍然适用于使用 LLVM 3.7.0 的 XCode 7.1.1。但是,开源 LLVM clang 不支持 Bitcoding。因此,您需要在开源编译器和 Apple 编译器之间切换,以便为 10.6 和 tvOS/watchOS(需要位编码)进行开发。
P.S.:LLVM 3.4 和 3.5.0 的 Mac OS X 二进制文件在 www.llvm.org/releases/download.html 中列为“Clang for Darwin 10.9”,而不是在以前的版本。
关于c++ - 如何使用 Xcode 4.6.2 到 7.1.1 恢复对 Mac OS X 10.6 部署的 c++0x/c++11 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14494513/
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我刚刚安装了带有RVM的Ruby2.2.0,并尝试使用它得到了这个:$rvmuse2.2.0--defaultUsing/Users/brandon/.rvm/gems/ruby-2.2.0dyld:Librarynotloaded:/usr/local/lib/libgmp.10.dylibReferencedfrom:/Users/brandon/.rvm/rubies/ruby-2.2.0/bin/rubyReason:Incompatiblelibraryversion:rubyrequiresversion13.0.0orlater,butlibgmp.10.dylibpro
我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“
我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da
有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=