这是我的问题:我想使用gcc或clang提供的C++ 11功能。但是,我有以下要求:

  • 我正在使用Mac
  • 我依赖于自制软件提供的一堆库(并且真的不想自己编译它们)。特别是OSG,它本身依赖于大量其他库。和助推,尽管我总是可以自己编译。

  • 自制软件似乎只想使用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的机会。

    现在,让我们回答您的问题:

  • 如果要使用C++ 11功能,请改用clang++ -stc=c++11 -stdlib=libc++。还有clang might have already supported all c++11 features
  • 如果您希望自制软件支持LLVM,则至少在后端已经支持。
  • 如果要使用clang作为编译器前端进行自制程序,则取决于自制程序社区的时间表。例如,您可以附加--with-c++11参数以使用clang编译boost。但是当brew install autoconf时不能使用此参数。实际上,某些组件可能无法通过clang正确编译。
  • 如果您知道它可以用clang编译,但尚不支持自制软件,则必须在$HOMEBREW_ROOT/Library/Formula目录中破解相应的ruby脚本。幸运的是,在大多数情况下,用./configure blablabla替换./configure blablabla CXX=clang++ -stc=c++11 -stdlib=libc++效果很好。顺便说一句,如果您的黑客成功,请向homebrew发出拉取请求。

  • 因此,尝试一下并玩得开心。

    07-24 09:45
    查看更多