現在のバージョンを使用して、GCC(GNU Compiler Collection)を1つずつインストールする方法
パッケージマネージャー(yum、rpm、apt、dpkgなど)を使用せず、共有ライブラリを使用せずに、正しいバージョンの依存関係を使用しますか?
一般的な開発者は、GCCを通常の方法でインストールし、パッケージマネージャー(yum、rpm、apt、dpkg、port、brewなど)を使用するか、こちらの指示に従ってください( http://gcc.gnu。 org/wiki/InstallingGCC )。
私の質問は、共有ライブラリなしでGCCを1つずつインストールする方法です。
GCCは以下に依存します。
あなたが典型的な開発者であれば、 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は、ここでの答えは「難しい方法」だと言います。なぜなら、すべてを1つずつ構築し、共有ライブラリを使用しないからです。
GCCインフラストラクチャを取得します。
ftp://gcc.gnu.org/pub/gcc/infrastructure/
ダウンロードを一時ディレクトリに配置します(任意のディレクトリを使用できます)。
/opt/downloads
ダウンロードディレクトリまたはそのサブディレクトリとは異なる一時ディレクトリにインフラストラクチャを構築します。
/tmp/gcc
次のような静的ライブラリを使用してインフラストラクチャを構成します。
./configure --disable-shared --enable-static --prefix=/tmp/gcc
--disable-sharedフラグは、ニーズに応じてよく見る価値があります。静的コードのみをビルドしているため、-disable-sharedを使用します。また、共有コードをビルドしないようにします。必要なのは、生成されたGCCをドライブ内で簡単に移動することです。したがって、すべての静的コードが必要であり、共有コードは必要ありません。共有コードを使用する場合は、-disable-sharedフラグを省略します。
この回答のコマンドのいずれかを実行する場合は、ニーズに合った現在のGCCバージョン番号を使用するようにコマンドを更新してください。この回答のコマンドは、GCC 4.6.2用です。
GCCのドキュメントには、「必要なツールの十分に新しいバージョンが通常機能する一方で、ライブラリの要件は一般に厳しいものです。新しいバージョンが機能する場合もありますが、ドキュメントに記載されたバージョンを使用する方が安全です」
GMPはGNUの複数精度算術ライブラリです。
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は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はGNU多倍精度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は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ページの幅のために、それらを別々の行に示しています)。
注:絶対パスを使用して構成し、ライブラリパス環境変数を設定しません。 bootstrapを無効にして共有ライブラリを無効にすることを選択します(一般的なユーザーは両方が必要な場合があります)。他のスレッドを使用するか、デフォルトのフラグをスキップします)。 YMMVとフラグについて読む here
/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に感謝)
受け入れられた答えにより、farが必要以上に複雑になり、すべてのバージョンで正しいとは限りません。 --disable-shared
を使用してGCCを構築することは、通常非常に悪い考えです。より簡単なアプローチについては、 http://gcc.gnu.org/wiki/InstallingGCC をご覧ください。
entireプロセスはこれ以上難しくないはずです(4.6.2をビルドしたいバージョンに置き換えてください):
tar xzf gcc-4.6.2.tar.gz
cd gcc-4.6.2
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.6.2/configure --prefix=$HOME/GCC-4.6.2
make
make install
(しかし、とにかく上記のリンクを読んでください、それは有用な情報を含んでいます。)
どうやらUbuntuの一部のユーザーは、GCCビルドプロセスを妨げる環境に大量のがらくたを持っているため、最初にそれを削除する必要があります。
unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH
私はクラスターで働いています。マスターノードのみがインターネットに接続されています。ノード上のソフトウェアは古くなっており、通常はメンテナンスされていません。ルートアクセス権がありません。次の2つのオプションがあります。
私は2つ目を選択し、gcc、g ++、gfortranをビルドしました。
すべてを組み込みました
PREFIX=$HOME/cmp/soft/sft
make
には
THREADS=8
以下では、gccは
ここから最新のgccを入手できます: ftp://gcc.gnu.org/pub/gcc/releases
依存関係はここにあります: ftp://gcc.gnu.org/pub/gcc/infrastructure
次のスクリプトで依存関係を取得します。
#!/bin/sh
# ===========
## variables:
GMP=gmp-4.3.2.tar.bz2
MPFR=mpfr-2.4.2.tar.bz2
MPC=mpc-0.8.1.tar.gz
ISL=isl-0.12.2.tar.bz2
CLOOG=cloog-0.18.1.tar.gz
MIRROR=ftp://gcc.gnu.org/pub/gcc/infrastructure
# ===========
## functions:
extract() {
if [ -f $1 ]; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.Zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "I don't know how to extract '$1'..." ;;
esac
else
echo "'$1' is not a valid file!"
fi
}
# ======================
## download and extract:
wget $MIRROR/$GMP
extract $GMP
wget $MIRROR/$MPFR
extract $MPFR
wget $MIRROR/$MPC
extract $MPC
wget $MIRROR/$ISL
extract $ISL
wget $MIRROR/$CLOOG
extract $CLOOG
以下では、次のbash関数が使用されます。
mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; }
以下の各コマンドは、ダウンロードしたばかりのlibのディレクトリで発行されます。
mkdircd build
../configure --disable-shared --enable-static --prefix=$PREFIX/gmp
make -j $THREADS && make check && make install
mkdircd build
../configure --with-gmp=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/mpfr
make -j $THREADS && make install
mkdircd build
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --disable-shared --enable-static --prefix=$PREFIX/mpc
make -j $THREADS && make install
mkdircd build
../configure --with-gmp-prefix=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/isl
make -j $THREADS && make install
mkdircd build
../configure --with-gmp-prefix=$PREFIX/gmp --with-isl-prefix=$PREFIX/isl --disable-shared --enable-static --prefix=$PREFIX/cloog
make -j $THREADS && make install
mkdircd build
export LD_LIBRARY_PATH=$PREFIX/gmp/lib:$PREFIX/mpfr/lib:$PREFIX/mpc/lib:$PREFIX/isl/lib:$PREFIX/cloog/lib
export C_INCLUDE_PATH=$PREFIX/gmp/include:$PREFIX/mpfr/include:$PREFIX/mpc/include:$PREFIX/isl/include:$PREFIX/cloog/include
export CPLUS_INCLUDE_PATH=$PREFIX/gmp/include:$PREFIX/mpfr/include:$PREFIX/mpc/include:$PREFIX/isl/include:$PREFIX/cloog/include
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --with-mpc=$PREFIX/mpc --with-isl=$PREFIX/isl --with-cloog=$PREFIX/cloog --disable-shared --enable-static --disable-multilib --prefix=$PREFIX/gcc --enable-languages=c,c++,fortran
make -j $THREADS bootstrap && make install
Gmpとmpfrを手動でダウンロードし、ソフトリンクを作成しなければならなかったことを除いて、上記のJonathanが言及したものを使用しました(gcc 4.4.2ディストリビューションにはおそらく「download_prerequisites」がありません)
cd src/gcc-4.4.2
ln -s ~/linux64/gmp-4.2.1 gmp
ln -s ~/linux64/mpfr-2.3.0 mpfr
ところで、「./ configure」で「-with-gmp」および「with-mpfr」を使用すると、「configure:error:cannot compute compute object files:cannot compile」と表示されます。したがって、gmpとmpfrのsrcsをダウンロードし、gcc src top leve dir内からそれへのソフトリンクを作成しました。
GMP、MPFRおよびMPC。を含むGCC依存関係をインストールしようとした後、追加のインストール要件、エラー、および欠落ファイルに遭遇しました。 MPFRのインストールに必要なgmp.hヘッダーファイルなど。このプロセスで遭遇する多くの問題があります。ただし、より簡単にビルドおよびインストールする方法がありますGCC-X.0.またはlater自動リンク付きバージョン。
オプション1
Makeでビルドする手間を省くために、単にインストールして、動的ライブラリをリンクします。
このスクリプトは、GMP、MPFRおよびMPCを含むサポートライブラリをダウンロードし、Symlinksを作成します。 will BUILDすべてのgcc依存関係gccインストールプロセスの一部として自動的に。
Make、Make Install、または実行./ configureによって/ somepath /にダウンロードされたサポートライブラリをビルドおよびリンクする必要はありません。ファイルまたは--with-gmp =/gmp_path /.../.....、-- with-mpfr =/mpfr_path/.../...などのリンクを追加します。これは、スクリプトを実行したときに行われたためです。作成シンボリックリンク。
オプション2
構成:
This is the GCC config Process, with gcc-X-000.tar.gz
問題:
tar -xvf gcc-X-000.tar.gz
cd gcc-X-000
./contrib/download_prerequisites
cd ..
mkdir objdir
/../gcc-X-000/configure --prefix=$HOME/gcc-X-000 --enable-languages=c,c++,fortran,go --disable-multilib
make -j 2
make install
注意:
-enable-languagesc ++やcなど。
-disable-multilib;システムとOSに基づいてmultilibを無効にすると、multilibについて続行するように求められます。
Makeの完了には長い時間がかかります。ただし、オプション-j #no_proを発行できます。これにより、PCまたはMac上のプロセッサの数に基づいてMakeが並行して並行して実行されます。
このプロセスの実行方法の詳細については、 https://gcc.gnu.org/wiki/InstallingGCC にアクセスしてください。
私はjoelparkerhendersonが受け入れたトップの回答に従いました。これは、インターネット経由で* NIXシステムにインストールする際に見つけることができる最良の回答です。
後世のために、「インストールエラー:オブジェクトファイルのサフィックスを計算できません:コンパイルできません」などのエラーが表示された場合に追加します。
次に、LD_LIBRBARY_PATHを/ tmp/gcc/libで更新します(コンテキストについてはjoelparkerhendersonの完全な回答を参照してください)
/ tmp/gcc/libにはすべての必要なmpfr/mpc/gmpが含まれているため、LD_LIBRARY_PATHに追加しない限り、ファイルとランタイムリンカーはそれらを見つけることができません。 LD_LIBRARY_PATHをエクスポートすることも忘れないでください;)。ここでより多くのコンテキスト: https://gcc.gnu.org/wiki/FAQ#configure_suffix