[解決済み] GCCをGMP、MPFR、MPC、ELFでバラバラにインストールする方法、共有ライブラリは不要ですか?
質問
GCC (the GNU Compiler Collection) を現在のバージョンで、ひとつひとつインストールするにはどうしたらよいでしょうか。
典型的な開発者は、典型的な方法で 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 に感謝します)
関連
-
[解決済み】valgrindエラーの解釈 サイズ4の無効な書き込み
-
[解決済み] gcc エラー : `itoa' への未定義の参照
-
[解決済み] g++ 出力: ファイルが認識されません。ファイル形式が認識されない
-
[解決済み] gcc エラー:間違った ELF クラスです。ELFCLASS64
-
[解決済み] gccのオプションにある-m32、-m64、nothingの違いは何ですか?
-
[解決済み] gccの-lpthreadオプション
-
[解決済み] コンパイル時に127のエラーが発生する。
-
[解決済み] CFLAGS, CCFLAGS, CXXFLAGS - これらの変数はいったい何を制御しているのでしょうか?
-
[解決済み] gcc/g++とcc1/cc1plusの違いは何ですか?
-
[解決済み] ビルドターゲットの外にgccのデバッグシンボルを生成する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ファイル形式が認識されない。GCCを使用してリンカスクリプトとして扱う
-
[解決済み] gcc/g++とcc1/cc1plusの違いは何ですか?
-
[解決済み] .ascizと.stringアセンブラディレクティブの違いは何ですか?
-
[解決済み] シグナル11[SIGSEGV]のデフォルトアクションでプロセスが終了しています。
-
C++コンパイルエラー:型に名前がない
-
[解決済み] gccやldで位置非依存の実行ファイルを作成するための-fPIEオプションとは何ですか?
-
[解決済み] cygwinにgccをインストールするにはどうしたらいいですか?
-
[解決済み] なぜGCCはa*a*a*a*aを(a*a*a)*(a*a*a)に最適化しないのでしょうか?
-
[解決済み] ライブラリを静的にリンクするようにgccに直接指示する
-
[解決済み] ライブラリヘッダからのGCC警告を抑制する方法は?