1. ホーム
  2. gcc

[解決済み] GCCをGMP、MPFR、MPC、ELFでバラバラにインストールする方法、共有ライブラリは不要ですか?

2022-08-16 16:42:03

質問

GCC (the GNU Compiler Collection) を現在のバージョンで、ひとつひとつインストールするにはどうしたらよいでしょうか。

依存関係の正しいバージョンを使用し、パッケージ マネージャー (yum、rpm、apt、dpkg など) を使用せず、共有ライブラリを使用しないようにするには、どうすればよいでしょうか。

典型的な開発者は、典型的な方法で GCC をインストールし、パッケージ マネージャー (yum, rpm, apt, dpkg, port, brew など) を使用するか、ここでの指示に従ってください ( http://gcc.gnu.org/wiki/InstallingGCC ).

私の質問は、共有ライブラリなしで、GCCを断片的にインストールする方法です。

  • 私は、共有ライブラリを使用せず、また、共有ライブラリを作成することなく、私のシステム上を移動することができる完全に独立した GCC が欲しいのです。
  • これはGCCが"the difficult way"と呼ぶもので、典型的なユーザにはお勧めしません。

GCCは以下のものに依存しています。

  • GMP: GNU 多重精度算術ライブラリ
  • MPFR: GNU 多重精度浮動小数点丸め込みライブラリ
  • MPC: GNU 多重精度 C ライブラリ
  • ELF: 実行形式およびリンク可能形式ライブラリ
  • PPL: Parma Polyhedra ライブラリ (オプション、メモリ最適化用)

どのように解決するのですか?

簡単な方法

あなたが一般的な開発者であれば、以下の手順で簡単にインストールできます。 http://gcc.gnu.org/wiki/InstallingGCC などのシステムパッケージマネージャを使用してインストールできます。

apt  install gcc  # for Debian, Ubuntu, etc.
yum  install gcc  # for RedHat, CentOS, etc.
brew install gcc  # for Mac OS X

ハード・ウェイ

GCCはここでの答えはquot;the hard way"だと言っています。なぜなら、それはすべてを一個一個構築し、共有ライブラリを使用しないからです。

GCC のインフラストラクチャ

GCCインフラストラクチャを取得します。

ftp://gcc.gnu.org/pub/gcc/infrastructure/

ダウンロードをtempディレクトリに置く(好きなディレクトリでOK)。

/opt/downloads

downloads ディレクトリやそのサブディレクトリとは異なる temp ディレクトリにインフラストラクチャを構築します。

/tmp/gcc

このように静的ライブラリを使ってインフラを構成します。

./configure --disable-shared --enable-static --prefix=/tmp/gcc

あなたのニーズによっては、-disable-sharedフラグをよく見る価値があるかもしれません。私が --disable-shared を使用するのは、静的コードのみを構築し、共有コードを一切構築しないことを確認したいからです。わたしの必要性は、出来上がったGCCをドライブの中で簡単に移動させることなので、すべての静的なコードが必要であり、共有コードは必要ありません。もし、共有コードを好むなら、-disable-sharedフラグを省略します。

バージョン

この回答のコマンドのいずれかを実行するとき、あなたの必要性にマッチする現在のGCCバージョン番号を使用するためにコマンドを更新することを確実にしてください。この回答におけるコマンドは GCC 4.6.2 用です。

GCCのドキュメントに次のように書かれていることに注意してください: "必要なツールの十分に新しいバージョンは通常動作しますが、ライブラリの要件は一般により厳しくなっています。新しいバージョンも場合によっては動作するかもしれませんが、文書化された正確なバージョンを使用することがより安全です。

GMP

GMPはGNU Multiple Precision Arithmetic Libraryです。

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
bunzip2 gmp-4.3.2.tar.bz2
tar xvf gmp-4.3.2.tar
cd gmp-4.3.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install

MPFR

MPFR は GNU 多重精度浮動小数点丸め込みライブラリです。GMPに依存しています。

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
bunzip2 mpfr-2.4.2.tar.bz2
tar xvf mpfr-2.4.2.tar
cd mpfr-2.4.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc
make && make check && make install

MPC

MPCはGNU Multiple-precision Cライブラリです。GMPとMPFRに依存しています。

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar zxvf mpc-0.8.1.tar.gz
cd mpc-0.8.1
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc --with-mpfr=/tmp/gcc
make && make check && make install

エルフ

ELF は Executable and Linkable Format の略です。このライブラリは、アーキテクチャに依存しないサイズとエンディアンのサポートを提供します。

wget http://www.mr511.de/software/libelf-0.8.13.tar.gz
tar zxvf libelf-0.8.13.tar.gz
cd libelf-0.8.13
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install

GCC

GCC は GNU Compiler Collection です。GMP, MPFR, MPC, ELF に依存します。

wget http://www.netgull.com/gcc/releases/gcc-4.6.2/gcc-4.6.2.tar.gz
tar zxvf gcc-4.6.2.tar.gz

同じマウントポイントにあるスクラッチディレクトリでgccをビルドします。 同じマウントポイントにあるスクラッチディレクトリに (tmp内でビルドするとクロスコンパイルホストの問題が発生します)

mkdir -p /opt/downloads/gcc-4.6.2-scratch
cd /opt/downloads/gcc-4.6.2-scratch

configureコマンドとそのフラグは、すべて1つのコマンドライン上になければなりません(この記事では、Webページの幅の関係で、それらを別々の行で表示しています)。

注:設定にはフルパスを使用し、ライブラリパスの環境変数は設定しない。ブートストラップを無効にし、共有ライブラリを無効にしたのは、 それらを必要としないからであり(典型的なユーザは両方を必要とするでしょう)、 posixスレッドを使用し、デフォルトのフラグを使用したのは、 それらを必要とするからです(典型的なユーザは、他のスレッドを使用したり デフォルトフラグをスキップしたいかもしれません)。YMMV とフラグについて読む はこちら

/opt/downloads/gcc-4.6.2/configure
  --disable-shared
  --disable-bootstrap
  --disable-libstdcxx-pch
  --enable-languages=all
  --enable-libgomp
  --enable-lto
  --enable-threads=posix
  --enable-tls
  --with-gmp=/tmp/gcc
  --with-mpfr=/tmp/gcc
  --with-mpc=/tmp/gcc
  --with-libelf=/tmp/gcc
  --with-fpmath=sse
make && make install

このページは、GCCのインストール情報、ビルド方法、様々なフラグ、その他に最適です。

http://www.acsu.buffalo.edu/~charngda/cc_build.html

更新情報

ppl ライブラリはメモリの最適化に使用できます: bugseng.com/products/ppl/Download を参照してください (コメント中の Paul に感謝)

gcc ソース ディレクトリから ./contrib/download_prerequisites を実行することができます。(reddit の N7P に感謝します)