我最近对 Xcode 5 中包含的新 clang 编译器感到沮丧。我想知道在 OS X 上安装 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。从这里获取的提示:
configure
与 CC=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-4.x.y/INSTALL/index.html
GCC 源代码中的文件,或在线 http://gcc.gnu.org/install/ .这是我用于 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)和 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/