在mac上安装GNU GCC

时间:2014-01-16 21:43:05

标签: macos gcc clang

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

需要考虑的事项:

  • 我不想使用MacPorts,fink,自制软件或任何其他第三方软件包管理器。
  • 我想使用最新的GCC,如果可能的话,从源代码编译。
  • 我需要现有的GCC(硬链接到clang)作为默认值,但是在需要时可以轻松地使用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和CLooG。是的,它们是可选的,但它们是一个更优化的编译器,我在没有它们的情况下构建很困难。确保使用ISL 0.12,最新版本(0.14)。
  • 如果可能,请使用独立的开发人员工具, XCode。 (XCode有一些错误的标题,虽然我没有注意到构建GCC的任何问题,但我遇到了其他软件(例如GPG)的问题。)
  • 我建议将所有资源都放在gcc目录中,而不是单独构建和安装(以这种方式更快)
  • 确保使用configure调用CC=clang CXX=clang++,以便GCC知道它不是由GCC编译的。
  • 当然,绝对是肯定,用make调用-j8,否则构建大约需要4个小时! (使用-j8,我的2012年中期MBP需要1 1/3小时,内存为8 GB。)(make -j8表示make可以同时构建8个线程(4核+ HT),而在2核机器上,您可以运行make -j4。)

希望这有帮助!

3 个答案:

答案 0 :(得分:6)

我这样做的方式是:

  1. 下载GCC的来源和众多支持包。这些说明位于GCC源代码中的gcc-4.x.y/INSTALL/index.html文件中,或位于http://gcc.gnu.org/install/的在线文件中。

  2. 使用脚本将GCC和支持库的源提取到目录中,创建对象目录,然后运行构建。

  3. 这是我用于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,编译所有内容需要一两个小时(使用-j8选项make),并且在编译时需要多个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) Mac OS X 10.9.2 Mavericks和Ubuntu 12.04衍生版本的MPFR 3.1.2和MPFR 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-08-14,我使用上面脚本的一个小变体在macOS Sierra 10.12上构建GCC 7.2.0(使用XCode 8作为引导程序编译器)。一个变化是,CLooG似乎不再需要(我停止使用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),但自标准版以来Mac版tar为我做了这个,它也可能适合你。

    2017-09-27,我无法使用与Sierra 10.12相同的脚本在macOS High Sierra 10.13(使用XCode 9作为bootstrap编译器)上构建GCC 7.2.0。立即错误是缺少标题<stack>;我需要追踪我的XCode 9安装是否正确 - 或者更准确地说,为什么它不正确,因为<stack>standard header in C++98以后。这可能很容易解决;我还没有花时间追逐它。 (是的,我已经多次运行xcode-select --install;由于网络故障我必须多次运行它可能是麻烦的一部分。)(我得到了GCC 7.2.0到在2017-12-02成功编译;我不记得需要什么样的体操 - 如果有的话 - 才能让它发挥作用。)

    时间流逝;版本号增加。但是,基本配方对我来说是最新版本的GCC。我有7.3.0(安装2018-01-2),8.1.0(安装2018-05-02),8.2.0(安装2018-07-26),8.3.0(安装2019-03-01)和现在9.1.0(今天安装,2019-05-03)。这些版本中的每一个都是在当前版本的macOS上构建和安装的,使用当前版本的XCode进行自举阶段(因此在构建GCC 9.1.0时使用macOS 10.14.4 Mojave和XCode 10.2.1)

答案 1 :(得分:3)

专门为OS X 10.9.x Mavericks使用预编译的二进制文件:

gcc-4.9

使用GNU服务器的源代码编译。

  

这包含gfortran的当前版本(4.7是稳定版本)   (免费,开源,GNU Fortran 95编译器),gcc(GNU C)和g ++(GNU   C ++)可以执行自动矢量化的编译器(即修改代码   利用AltiVec / SSE,自动)和其他   像OpenMP这样的复杂优化。有关更多信息,请参阅   this webpage

     

将我的二进制文件下载, cd 下载到下载文件夹。然后 gunzip   gcc-4.9-bin.tar.gz (如果你的浏览器还没有这样做的话)然后    sudo tar -xvf gcc-4.9-bin.tar -C / 。它安装了所有内容   的的/ usr /本地即可。只需键入即可调用Fortran 95编译器   的 gfortran 即可。您还需要安装Apple的XCode Tools   来自Mac App Store。使用XCode 4或5,您需要下载   命令行工具作为附加步骤。你会找到这个选项   在XCode的首选项中下载命令行工具。

     

在10.9 Mavericks 上,只需输入即可获得命令行工具    xcode-select --install

答案 2 :(得分:3)

Homebrew现在有了GCC包,所以你可以用这个命令安装它:

brew install gcc