我最近对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.)希望这可以帮助!
Homebrew 现在有 GCC 包,因此您可以使用以下命令安装它:
brew install gcc
Run Code Online (Sandbox Code Playgroud)
我这样做的方式是:
下载GCC的源代码和众多支持包.这些说明在gcc-4.x.y/INSTALL/index.htmlGCC源代码的文件中,或在http://gcc.gnu.org/install/上在线.
使用脚本将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
Run Code Online (Sandbox Code Playgroud)
完成后,也运行安装.然后$HOME/gcc/gcc-4.8.2/bin在您的PATH之前添加(您在--prefixplus中指定的名称/bin)/usr/bin.
使用具有5400 rpm旋转磁盘的MacBook Pro,编译所有内容(使用-j8选项make)需要一到两个小时,并且在编译时需要几千兆字节的磁盘空间.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 3.1.2在Mac OS X 10.9.2 Mavericks和Ubuntu 12.04衍生产品上.请注意gmp-6.0.0a.tar.xz提取到目录中gmp-6.0.0(不像gmp-6.0.0a您期望的那样).
2014年至2017年3月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上的GCC 7.2.0,下面显示的构建脚本只有很小的变化(10.12).辅助库的版本经常变化.
在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
Run Code Online (Sandbox Code Playgroud)
确保你的版本tar支持所有4种不同的压缩文件格式(.lz,.gz,.xz,.bz2),但由于标准Mac版tar确实对我来说,它可能会为你工作了.
在2017-09-27,我无法使用与Sierra 10.12相同的脚本在macOS High Sierra 10.13(使用XCode 9作为引导编译器)上构建GCC 7.2.0.即时错误是缺少标题<stack>; 我需要追踪我的XCode 9安装是否正确 - 或者更准确地说,为什么它不正确,因为它是C++ 98以后<stack>的标准头.可能很容易解决; 我还没花时间追逐它.(是的,我已经xcode-select --install多次运行;由于网络故障我不得不多次运行它可能是麻烦的一部分.)
| 归档时间: |
|
| 查看次数: |
22440 次 |
| 最近记录: |