这是我的问题:我想使用gcc或clang提供的C++ 11功能。但是,我有以下要求:
自制软件似乎只想使用gcc(如果我输入错了,请纠正我)。我找不到任何选项来切换到LLVM。虽然我知道这可能是由于并非所有库都与LLVM兼容,但对于那些库来说,这仍然是一个不错的功能。
Mac的gcc上预装的gcc的版本是4.2。 gcc 4.2没有所需的c++ 11功能。我已经通过homebrew安装了4.7,但是搜索如何设置homebrew以使用它,都说不要这样做(mac上的gcc 4.2不是原始版本,因此我得到的4.7版本将无法编译一些东西)。
我的问题是:是否有人对解决此问题有任何建议或修正?我应该放弃自制吗?有人知道Homebrew是否计划在将来切换到LLVM吗?是否有人针对如何解决这些不兼容问题制定了任何升级计划?
从长远来看,我不知道自制软件如何继续依赖gcc 4.2,但是还没有找到关于此问题的真正讨论。
最佳答案
Mac上的默认GCC不是GNU的真实GCC。实际上是LLVM-GCC,它是GCC的一个分支。几年前,LLVM-GCC被终止,并被DragonEgg取代,后者是一个GCC插件,可以使用LLVM作为GCC后端。
LLVM-GCC只是一个编译器前端,其作用是使用GCC前端将源代码转换为LLVM IR [Intro to LLVM 11.3]。生成IR后,LLVM后端将使用它生成二进制代码。此步骤与GCC无关。
上述目标从10.7完全实现,其组件全部由LLVM提供的前端clang编译。
但是苹果仍然保留了LLVM-GCC和GCC运行时库。我想它的目的可能是提供仅编译某些代码GCC的机会。
现在,让我们回答您的问题:
clang++ -stc=c++11 -stdlib=libc++
。还有clang might have already supported all c++11 features。 --with-c++11
参数以使用clang编译boost。但是当brew install autoconf
时不能使用此参数。实际上,某些组件可能无法通过clang正确编译。 $HOMEBREW_ROOT/Library/Formula
目录中破解相应的ruby脚本。幸运的是,在大多数情况下,用./configure blablabla
替换./configure blablabla CXX=clang++ -stc=c++11 -stdlib=libc++
效果很好。顺便说一句,如果您的黑客成功,请向homebrew发出拉取请求。 因此,尝试一下并玩得开心。