[解決済み] MacにGNU GCCをインストールする
質問
最近、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ディレクトリに置くことをお勧めします(こちらの方が早いです)。
-
を確認します。
を呼び出すと
configure
でCC=clang CXX=clang++
でコンパイルされていないことがGCCにわかるように。 -
間違いなく、間違いなく、間違いなく
を呼び出す。
make
と-j8
さもないと、ビルドに4時間くらいかかりますよ。(ただし-j8
私のMid-2012 MBP, 8gb RAMで1時間半かかりました)。(make -j8
というのはmake
は同時に8スレッド(4コア+HT)を構築することができますが、2コアのマシンではmake -j4
.)
お役に立てれば幸いです。
解決方法は?
私がやっている方法は
-
GCCと多数のサポートパッケージのソースをダウンロードします。その手順は
gcc-4.x.y/INSTALL/index.html
ファイル、またはオンラインでは http://gcc.gnu.org/install/ .- GNU Multiple Precision Library (GMP) バージョン 4.3.2 (またはそれ以降) より。 http://gmplib.org/ .
- MPFRライブラリバージョン2.4.2(またはそれ以降)より http://www.mpfr.org/ .
- MPCライブラリバージョン0.8.1(またはそれ以降)より http://www.multiprecision.org/ .
- ISL ライブラリ バージョン 0.11.1 から ftp://gcc.gnu.org/pub/gcc/infrastructure/ .
- CLooG 0.18.0より ftp://gcc.gnu.org/pub/gcc/infrastructure/ .
-
スクリプトを使って、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が使用されています)。
関連
-
[解決済み】Macでポート3000をロックしているプロセスを検索(およびkill)する
-
[解決済み] DOCKER_HOST 変数の役割は何ですか?
-
[解決済み] zsh で $PATH 変数のアサーションをどこに置くか?
-
[解決済み] Zsh は安全でない補完依存のディレクトリを検出する
-
[解決済み] なぜGCCはa*a*a*a*aを(a*a*a)*(a*a*a)に最適化しないのでしょうか?
-
[解決済み] Mac OS Xで、指定したTCPポートでリッスンしているのは誰ですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] OS Xターミナルでカーソルを単語単位で移動する方法
-
[解決済み] Mac OS XでのMavenのインストール
-
[解決済み】Mac OS XでPostgreSQLサーバーを起動するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】OS X Framework Library not loaded: 'Image not found'.
-
[解決済み] SSH -L 接続は成功したが、localhost のポート転送が機能しない "channel 3: open failed: connect failed: 接続が拒否されました"
-
[解決済み] 特に更新された上流をトピックブランチにマージする場合は、このマージが必要な理由を説明するコミットメッセージを入力してください。
-
[解決済み] MAMPはphp.iniをどこに保存しているのですか?
-
[解決済み] Virtualbox が errorID=BLKCACHE_IOERR を返す
-
[解決済み] (Mac) -bash。git_ps1: コマンドが見つかりません。
-
[解決済み] Mac OS Xのターミナルでcdコマンドを逆引きするにはどうすればよいですか?
-
[解決済み] ファイルがリンク先のアーキテクチャではない、サポートされていないファイル形式でビルドされた (x86_64)
-
[解決済み] ターミナルで現在のブランチとフォルダのパスを表示するにはどうすればよいですか?
-
[解決済み] OS X:Linuxのwgetに相当するもの