[英]Install GNU GCC on mac
我最近對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。 從這里獲取的提示:
CC=clang CXX=clang++
調用configure
,以便GCC知道它不是由GCC編譯的。 -j8
調用make
,否則構建將花費大約4個小時! (使用-j8
,我的2012年中期MBP需要1 1/3小時,內存為8GB。)( make -j8
表示make
可以同時構建8個線程(4個核心+ HT),而在2核機器上,你會運行make -j4
。) 希望這可以幫助!
我這樣做的方式是:
下載GCC的源代碼和眾多支持包。 說明位於GCC源代碼中的gcc-4.xy/INSTALL/index.html
文件中,或者位於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
完成后,也運行安裝。 然后在/usr/bin
之前將$HOME/gcc/gcc-4.8.2/bin
(您在--prefix
plus /bin
指定的名稱)添加到PATH。
有了一個體面的MacBook Pro有一個5400轉的旋轉盤,它需要一兩個小時來編譯一切(使用-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
確保你的tar
版本支持所有4種不同的壓縮文件格式( .lz
, .gz
, .xz
, .bz2
),但由於tar
的標准Mac版本為我做了這些,它也可能適合你。
在2017-09-27,我無法使用與Sierra 10.12相同的腳本在macOS High Sierra 10.13(使用XCode 9作為引導編譯器)上構建GCC 7.2.0。 即時錯誤是缺少標題<stack>
; 我需要追蹤我的XCode 9安裝是否正確 - 或者更確切地說,為什么它不正確,因為<stack>
是C ++ 98以后的標准頭 。 可能很容易解決; 我還沒花時間追逐它。 (是的,我已經多次運行xcode-select --install
;由於網絡故障我不得不多次運行它可能是麻煩的一部分。) (我在2017年成功編譯了GCC 7.2.0 -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)
使用專門針對OS X 10.9.x Mavericks的預編譯二進制文件:
→ gcc-4.9
使用GNU服務器的源代碼編譯。
這包含gfortran(免費,開源,GNU Fortran 95編譯器),gcc(GNU C)和g ++(GNU C ++)編譯器的當前版本(4.7是穩定版本),它們可以執行自動矢量化(即修改代碼以利用AltiVec / SSE,自動)和其他復雜的優化,如OpenMP。 有關詳細信息,請參閱此網頁 。
下載我的二進制文件,然后cd到下載文件夾 。 然后gunzip gcc-4.9-bin.tar.gz (如果你的瀏覽器還沒有這樣做)然后sudo tar -xvf gcc-4.9-bin.tar -C / 。 它將所有內容安裝在/ usr / local中 。 只需鍵入gfortran即可調用Fortran 95編譯器。 您還需要從Mac App Store安裝Apple的XCode Tools。 使用XCode 4或5,您需要下載命令行工具作為附加步驟。 您將在XCode的首選項中找到下載命令行工具的選項。
在10.9 Mavericks上 ,只需輸入xcode-select --install即可獲得命令行工具。
Homebrew現在有了GCC包,所以你可以用這個命令安裝它:
brew install gcc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.