1. ホーム
  2. macos

[解決済み] MacにGNU GCCをインストールする

2022-03-10 20:05:44

質問

最近、Xcode 5に含まれる新しいclangコンパイラに不満を持っています。OS XにGNU GCCをインストールする最良の方法は何だろうと考えていました。

検討すべきこと

  • MacPorts、fink、homebrew、その他のサードパーティパッケージマネージャを使いたくありません。
  • できれば、ソースからコンパイルした最新のGCCを使いたいのですが。
  • 既存のGCC(clangへのハードリンク)をデフォルトのままにしておいて、必要なときに簡単にGNU GCCを使えるようにしたいのですが、どうしたらいいですか?
  • コードの改変はなるべく避けたいのですが。

EDIT: 成功! GCC 4.9.2 (with GMP 5.1.3, MPFR 3.1.2, MPC 1.0.2, ISL 0.12.2, and CLooG 0.18.1) を使って、GCCのビルドに成功した。ここから先はヒントです。

  • ISLとCLooGは必ず使ってください。これらはオプションですが、より最適化されたコンパイラを作ることができ、私はこれなしでビルドするのに苦労しました。ISL 0.12を使っていることを確認してください。 ではなく 最新版(0.14)です。
  • 可能であれば、スタンドアロンのDeveloper Toolsを使用してください。 ではなく XCodeです。(XCodeはいくつかのバギーなヘッダを持っていますし、GCCのビルドでは問題を感じませんでしたが、他のソフトウェアでは問題がありました(たとえば、GPG))。
  • 別々にビルドしてインストールするよりも、すべてのソースをgccディレクトリに置くことをお勧めします(こちらの方が早いです)。
  • を確認します。 を呼び出すと configureCC=clang CXX=clang++ でコンパイルされていないことがGCCにわかるように。
  • 間違いなく、間違いなく、間違いなく を呼び出す。 make-j8 さもないと、ビルドに4時間くらいかかりますよ。(ただし -j8 私のMid-2012 MBP, 8gb RAMで1時間半かかりました)。( make -j8 というのは make は同時に8スレッド(4コア+HT)を構築することができますが、2コアのマシンでは make -j4 .)

お役に立てれば幸いです。

解決方法は?

私がやっている方法は

  1. GCCと多数のサポートパッケージのソースをダウンロードします。その手順は gcc-4.x.y/INSTALL/index.html ファイル、またはオンラインでは http://gcc.gnu.org/install/ .

  2. スクリプトを使って、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 の前にPATHに追加してください。 /usr/bin .

まともなMacBook Proと5400rpmの回転ディスクを使えば、すべてをコンパイルするのに1〜2時間かかる(ただし、この場合 -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-09-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 で、以下に示すGCC 7.2.0 on macOS Sierra (10.12) のビルドスクリプトでマイナーチェンジのみ行ったことがあります。 補助ライブラリのバージョンは、それなりに頻繁に変更されました。


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、macOS High Sierra 10.13(起動コンパイラにXCode 9を使用)で、Sierra 10.12で動作したのと同じスクリプトでGCC 7.2.0のビルドに失敗しました。 すぐに出たエラーは、ヘッダがない <stack> 私のXCode 9のインストールが正しいかどうか、より正確に言えば、なぜそれが正しくないのかを追跡する必要があります。 <stack> C++98の標準ヘッダー をオンにしています。 おそらく簡単な修正方法があるのでしょうが、私はまだそれを追いかけることに時間を費やしていません。 (そう、私は xcode-select --install ネットワークの不具合で何度も実行することになったのも、トラブルの一因かもしれません)。 (2017-12-02にGCC 7.2.0のコンパイルに成功しました。これを動作させるためにどんな体操-あるとすれば-が必要だったかは覚えていません)

時は流れ、バージョン番号は増える。 しかし、基本的なレシピは、より新しいバージョンの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インストール)です。 これらの各バージョンは、ブートストラップフェーズに現行バージョンのXCodeを使用して、その時の現行バージョンのmacOSでビルドおよびインストールされました(したがって、GCC 9.1.0のビルド時にはmacOS 10.14.4 MojaveとXCode 10.2.1が使用されています)。