macos - 在 mac 上安装 GNU GCC

标签 macos gcc clang

我最近对 ​​Xcode 5 中包含的新 clang 编译器感到沮丧。我想知道在 OS X 上安装 GNU GCC 的最佳方法是什么。

需要考虑的事项:

  • 我不想使用 MacPorts、fink、homebrew 或任何其他第三方包管理器。
  • 如果可能,我想使用从源代码编译的最新 GCC。
  • 我需要现有的 GCC(到 clang 的硬链接(hard link))保持默认,但在需要时可以轻松使用 GNU GCC。
  • 如果可能的话,我想避免修改代码。

  • 编辑:成功!使用 GCC 4.9.2(使用 GMP 5.1.3、MPFR 3.1.2、MPC 1.0.2、ISL 0.12.2 和 CLooG 0.18.1)我成功构建了 GCC。从这里获取的提示:
  • 确保使用 ISL 和 CLoG。是的,它们是可选的,但它们会生成一个更优化的编译器,没有它们我很难构建。确保您使用的是 ISL 0.12,而不是最新版本 (0.14)。
  • 如果可能,请使用独立的开发人员工具,而不是 XCode。 (XCode 有一些错误的 header ,虽然我没有注意到构建 GCC 的任何问题,但我在其他软件(例如 GPG)方面遇到了问题)。
  • 我建议将所有源代码放在 gcc 目录中,而不是单独构建和安装(这样更快)
  • 确保调用 configureCC=clang CXX=clang++所以 GCC 知道它不是由 GCC 编译的。
  • 绝对,绝对,绝对,调用 make-j8 ,否则构建将需要大约 4 个小时! (使用 -j8 ,在我的 2012 年中期 MBP 上使用 8gb RAM 需要 1 1/3 小时。)(make -j8 表示 make 可以同时构建 8 个线程(4 核 + HT),而在 2 核上您将运行的机器make -j4。)

  • 希望这可以帮助!

    最佳答案

    我这样做的方式是:

  • 下载 GCC 的源代码和众多支持包。说明在 gcc-4.x.y/INSTALL/index.html GCC 源代码中的文件,或在线 http://gcc.gnu.org/install/ .
  • GNU 多精度库 (GMP) 版本 4.3.2(或更高版本)来自 http://gmplib.org/ .
  • MPFR 库版本 2.4.2(或更高版本)来自 http://www.mpfr.org/ .
  • 来自 http://www.multiprecision.org/ 的 MPC 库版本 0.8.1(或更高版本) .
  • ISL 库版本 0.11.1 来自 ftp://gcc.gnu.org/pub/gcc/infrastructure/ .
  • ClooG 0.18.0 来自 ftp://gcc.gnu.org/pub/gcc/infrastructure/ .
  • 使用脚本将 GCC 的源代码和支持库提取到一个目录中,创建对象目录,然后运行构建。

  • 这是我用于 GCC 4.8.2 的脚本:
    GCC_VER=gcc-4.8.2
    tar -xf ${GCC_VER}.tar.bz2 || exit 1
    
    (
    cd ${GCC_VER} || exit
    
    cat <<EOF |
        cloog 0.18.0 tar.gz 
        gmp 5.1.3 tar.xz 
        isl 0.11.1 tar.bz2 
        mpc 1.0.1 tar.gz 
        mpfr 3.1.2 tar.xz
    EOF
    
    while read file vrsn extn
    do
        (
        set -x
        tar -xf "../$file-$vrsn.$extn" &&
        ln -s "$file-$vrsn" "$file"
        )
    done
    )
    
    mkdir ${GCC_VER}-obj
    cd ${GCC_VER}-obj
    ../${GCC_VER}/configure --prefix=$HOME/gcc/gcc-4.8.2
    make -j8 bootstrap
    

    完成后,也运行安装。然后添加$HOME/gcc/gcc-4.8.2/bin (您在 --prefix 中指定的名称加上 /bin )在 /usr/bin 之前到您的 PATH .

    使用具有 5400 rpm 旋转磁盘的体面 MacBook Pro,编译所有内容需要一两个小时(使用 -j8make 选项),并且在编译时需要数 GB 的磁盘空间。这样做时SSD很好(肯定更快)!

    GCC 4.9.0 于 2014-04-22 发布。我使用基本相同的过程安装了它,但使用了 CLooG 0.18.1 和 ISL 0.12.2(需要更新)和 GMP 5.1.3(和 6.0.0a)、MPC 1.0.2(或 1.0.1)和 MPFR Mac OS X 10.9.2 Mavericks 和 Ubuntu 12.04 衍生版本上的 3.1.2。请注意 gmp-6.0.0a.tar.xz解压到目录gmp-6.0.0 (不是您所期望的 gmp-6.0.0a)。

    在 2014 年和 2017 年 9 月 27 日之间,我构建了 GCC 版本 4.9.0、4.9.1、5.1.0、5.2.0、5.3.0、6.1.0、6.2.0、6.3.0、7.1.0 macOS Sierra (10.12) 上的 GCC 7.2.0 的构建脚本只有微小的变化。辅助库的版本经常更改。

    macOS Sierra 和 High Sierra

    在 2017 年 8 月 14 日,我使用上述脚本的一个小变体在 macOS Sierra 10.12 上构建 GCC 7.2.0(使用 XCode 8 作为引导编译器)。一个变化是似乎不再需要 CLoG(我停止在 GCC 6.2.0 中添加它)。这是我当前的脚本:
    #!/bin/bash
    
    #export DYLD_LIBRARY_PATH=$(clnpath $(dirname $(dirname $(which g++)))/lib:$DYLD_LIBRARY_PATH)
    unset DYLD_LIBRARY_PATH
    
    TAR=/opt/gnu/bin/tar
    VER_NUM=7.2.0
    GCC_VER=gcc-${VER_NUM}
    TGT_BASE=/opt/gcc
    TGT_DIR=${TGT_BASE}/v${VER_NUM}
    CC=/usr/bin/clang
    CXX=/usr/bin/clang++
    
    extract() {
        echo "Extract $1"
        $TAR -xf $1
    }
    
    if [ ! -d "$GCC_VER" ]
    then extract ${GCC_VER}.tar.xz || exit 1
    fi
    
    (
    cd ${GCC_VER} || exit
    
    nbncl <<EOF |
        gmp     6.1.2   tar.lz 
        isl     0.16.1  tar.bz2 
        mpc     1.0.3   tar.gz 
        mpfr    3.1.5   tar.xz
    EOF
    
    while read file vrsn extn
    do
        tarfile="../$file-$vrsn.$extn"
        if [ ! -f "$tarfile" ]
        then echo "Cannot find $tarfile" >&2; exit 1;
        fi
        if [ ! -d "$file-$vrsn" ]
        then
            (
            set -x
            extract "$tarfile" &&
            ln -s "$file-$vrsn" "$file"
            ) || exit 1
        fi
    done
    )
    
    if [ $? = 0 ]
    then
        mkdir ${GCC_VER}-obj
        cd ${GCC_VER}-obj
        ../${GCC_VER}/configure --prefix="${TGT_DIR}" \
            CC="${CC}" \
            CXX="${CXX}"
        make -j8 bootstrap
    fi
    

    确保您的 tar 版本支持所有 4 种不同的压缩文件格式( .lz.gz.xz.bz2 ),但由于 tar 的标准 Mac 版本这样做对我来说,它可能对你也有用。

    在 2017 年 9 月 27 日,我未能使用与 Sierra 10.12 上相同的脚本在 macOS High Sierra 10.13(使用 XCode 9 作为引导编译器)上构建 GCC 7.2.0。直接错误是缺少标题 <stack> ;我需要追踪我的 XCode 9 安装是否正确——或者更准确地说,为什么它不正确,因为 <stack>standard header in C++98向前。可能有一个简单的解决方法;我只是还没有花时间去追它。 (是的,我已经运行了 xcode-select --install 多次;由于网络故障,我不得不多次运行它的事实可能是问题的一部分。)(我在 2017 年 12 月成功编译了 GCC 7.2.0- 02;我不记得需要什么体操(如果有的话)才能让它发挥作用。)

    时间流逝;版本号增加。但是,基本配方对我来说适用于更新版本的 GCC。我有 7.3.0(2018 年 1 月 2 日安装)、8.1.0(2018 年 5 月 2 日安装)、8.2.0(2018 年 7 月 26 日安装)、8.3.0(2019 年 3 月 1 日安装)和现在 9.1.0(今天安装,2019-05-03)。这些版本中的每一个都是在当时的当前版本的 macOS 上构建和安装的,在引导阶段使用当前版本的 XCode(因此在构建 GCC 9.1.0 时使用 macOS 10.14.4 Mojave 和 XCode 10.2.1)

    关于macos - 在 mac 上安装 GNU GCC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21173518/

    相关文章:

    macos - Webview 确实完成了 HTML5 视频播放器未调用的框架的加载

    c++ - 如何为 cpp 和 h 文件创建别名(并忽略编译器 __attributes__)

    c++ - 如何将 XCode 的 libc++ 与 top-of-trunk clang 一起使用?

    objective-c - 这个: _Pragma ("clang assume_nonnull begin")是什么意思

    python - 安装适用于 Mac 的 ODBC 驱动程序 pyodbc

    objective-c - 以编程方式更改 NSSlider 值

    c - Linux中C语言中Printf()在 "while(1)"循环之前不执行

    gcc - 针对共享库进行编译时会发生什么?

    c++ - 使用 clang 从 stdin 自动完成

    macos - 尽管建议修复 Mac OS X Yosemite,但 GIT SSL 错误仍然存​​在