【问题标题】:How to update to C++11?如何更新到 C++11?
【发布时间】:2012-03-05 12:15:57
【问题描述】:

我是编程新手,所以从未经历过语言更新。随着 C++11 的发布,我想利用所有新功能,例如 lambda 表达式和线程。我知道我可以使用外部库来做到这一点,但使用本地语言功能会更方便。

我在 Xcode 3.2.6 的 Mac OS X Snowleopard 上使用 gcc 4.2.1

我需要做什么和更新才能开始使用 C++11 功能?

【问题讨论】:

  • @StilesCrisis 这个问题指的是狮子,而我问的是雪豹......
  • 嗯,这肯定只会在雪豹上更具挑战性。我猜 MacPorts 是一样的,而 Xcode 是一个失败的原因。

标签: c++ macos unix gcc c++11


【解决方案1】:

基本上,您只需要获得一个支持新功能的工具链。在 macOS 中,这将是 GCC 或 clang++。如果需要,您可能需要下载/编译特定版本(即,如果您要尝试的功能不在预打包的编译器包中,但在存储库中可用)。

我从 subversion 下载并编译了最新的 clang++ 主干进行一些测试,并在 Snow Leopard 中安装了带有 macports 的 g++ 4.6。我记得我在环境设置方面遇到了一些问题,但不太记得是哪个编译器给了我问题或者我是如何解决它们的。 Google 是你的朋友 :)

【讨论】:

    【解决方案2】:

    您可以更新到 Xcode 4.1(或者您可以为 Snow Leopard 获得的任何最新版本)并获得具有更多 C++11 功能的新编译器。 Stack Overflow 上有一些关于在 Snow Leopard 上的 Xcode 4.1 中更好地支持 C++11 的帖子。

    但即使是通过 Xcode 提供的最新编译器也不支持某些 C++11 功能,例如 lambda。要获得最佳 C++11 支持,您需要安装更新的编译器 gcc 4.6 或 4.7 或 Clang。

    我经常从源代码构建最新版本的 clang。如果您熟悉构建其他开源软件,这并不难。我将 git repos 用于 clang 和 llvm,http://llvm.org/git/llvm.githttp://llvm.org/git/clang.git。您还可以在他们的网站上找到入门说明:http://clang.llvm.org/get_started.html。一旦你有了 clang 和 llvm 的源代码,它就是 ./configure && make && sudo make install。 (您可能希望在安装之前运行测试,因为它直接在存储库之外。在 make 之后在 llvm 目录中执行 make check,一旦将 cd 传递到 tools/clang 并运行 make test。如果然后一切都好sudo make install)

    我不记得 Snow Leopard 是否包含 libc++,因此您可能也需要获取它。 http://libcxx.llvm.org/

    构建并安装所有内容后,您可以执行以下操作:

    clang++ -std=c++11 -stdlib=libc++ main.cpp && ./a.out
    

    你应该拥有最好的 C++11 支持。

    clang 中的最新补丁确实改进了对作为新 C++ 程序员可能会注意到的最后一个特性的支持。仍然有一些零碎的东西,但是从 3.1 开始,据我所知,clang 具有 gcc 4.7 或 VC++11 所具有的所有 C++11 功能,此外还有更多。 libc++ 在 C++11 标准库功能 IME 方面的差距也是最小的(尽管我认为 VC++ 的标准库一旦赶上语言功能,例如 char32_t 和 char16_t 作为本机类型,也将是相当完整的,因此标准的强制专业化可以使用这些类型)。

    【讨论】:

    • Snow Leopard 没有最新的 libc++,您必须构建它。但是,从 libc++ 文档中不清楚如何使用现代 clang++ 来做到这一点。它们为 Linux 或为 [Mountain] Lion 编译的 Mac 二进制文件提供说明,即。 OS X 10.7 和 10.8。
    • @user465139 执行 cd libcxx/lib; export TRIPLE=-apple-; ./buildit 的说明在 Snow Leopard 上不起作用吗?
    • + clang++ -c -g -Os -arch i386 -arch x86_64 -std=c++0x -U__STRICT_ANSI__ -nostdinc++ -I../include ../src/exception.cpp ../ src/exception.cpp:18:12:致命错误:找不到“cxxabi.h”文件#include
    • 哦,我猜 Snow Leopard 不包括 libc++abi 什么的。您还需要获取并构建它:libcxxabi.llvm.org
    • 感谢您的有用提示,+1。但是,libcxxabi 也不构建,看起来像 Catch-22:+ clang++ -c -g -O3 -arch i386 -arch x86_64 -std=c++11 -stdlib=libc++ -fstrict-aliasing -Wstrict-aliasing=2 -Wsign-conversion -Wshadow -Wconversion -Wunused-variable -Wmissing-field-initializers -Wchar-subscripts -Wmismatched-tags -Wmissing-braces -Wshorten-64-to-32 -Wsign-compare -Wstrict-aliasing=2 -Wstrict -overflow=4 -Wunused-parameter -Wnewline-eof -I../include ../src/cxa_aux_runtime.cpp ../src/cxa_aux_runtime.cpp:14:10:致命错误:找不到'typeinfo'文件#include ^
    【解决方案3】:

    如果你安装了自制软件,从this article,只需两步:

    brew tap homebrew/dupes
    brew install gcc --enable-cxx --enable-fortran --use-llvm
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 2015-05-11
      • 2021-10-07
      相关资源
      最近更新 更多