web-dev-qa-db-ja.com

共有ライブラリなしでGMP、MPFR、MPC、ELFを使用してGCCを1つずつインストールする方法は?

現在のバージョンを使用して、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が必要です。
  • これはGCCが「難しい方法」と呼ぶものであり、一般的なユーザーには推奨されません。

GCCは以下に依存します。

  • GMP:GNU多重精度算術ライブラリ
  • MPFR:GNU複数精度の浮動小数点丸めライブラリ
  • MPC:GNU複数精度のCライブラリ
  • ELF:実行可能およびリンク可能なフォーマットライブラリ
  • PPL:Parma Polyhedra Library(オプション、メモリ最適化用)
111

簡単な方法

あなたが典型的な開発者であれば、 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インフラストラクチャ

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

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

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多倍精度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ページの幅のために、それらを別々の行に示しています)。

注:絶対パスを使用して構成し、ライブラリパス環境変数を設定しません。 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に感謝)

119

受け入れられた答えにより、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
115
Jonathan Wakely

私はクラスターで働いています。マスターノードのみがインターネットに接続されています。ノード上のソフトウェアは古くなっており、通常はメンテナンスされていません。ルートアクセス権がありません。次の2つのオプションがあります。

  • 必要な静的ソフトウェア(計算パッケージ)を構築します。または
  • 静的コンパイラをビルドします。

私は2つ目を選択し、gcc、g ++、gfortranをビルドしました。

すべてを組み込みました

PREFIX=$HOME/cmp/soft/sft

makeには

THREADS=8

以下では、gccは

  • GMP
  • MPFR
  • MPC
  • ISL
  • クローグ

ここから最新の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のディレクトリで発行されます。

GMP

mkdircd build
../configure --disable-shared --enable-static --prefix=$PREFIX/gmp
make -j $THREADS && make check && make install

MPFR

mkdircd build
../configure --with-gmp=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/mpfr
make -j $THREADS && make install

MPC

mkdircd build
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --disable-shared --enable-static --prefix=$PREFIX/mpc
make -j $THREADS && make install

ISL

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

gcc

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
24
Adobe

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内からそれへのソフトリンクを作成しました。

6
vptr

GMP、MPFRおよびMPC。を含むGCC依存関係をインストールしようとした後、追加のインストール要件、エラー、および欠落ファイルに遭遇しました。 MPFRのインストールに必要なgmp.hヘッダーファイルなど。このプロセスで遭遇する多くの問題があります。ただし、より簡単にビルドおよびインストールする方法がありますGCC-X.0.またはlater自動リンク付きバージョン

オプション1

Makeでビルドする手間を省くために、単にインストールして、動的ライブラリをリンクします。

  • GCC-X.0.0 -versionをダウンロードします(最新バージョンは https://gcc.gnu.org/ から)
  • Gcc-X-000.tar.gzファイルを/ somepath /の場所に抽出します。
  • .tar.gzファイルを抽出したら、/ somepath /またはソースディレクトリにある./ contrib/download_prerequisitesスクリプトを実行します。
  • このスクリプトは、GMP、MPFRおよびMPCを含むサポートライブラリをダウンロードし、Symlinksを作成します。 will BUILDすべてのgcc依存関係gccインストールプロセスの一部として自動的に

    Make、Make Install、または実行./ configureによって/ somepath /にダウンロードされたサポートライブラリをビルドおよびリンクする必要はありません。ファイルまたは--with-gmp =/gmp_path /.../.....、-- with-mpfr =/mpfr_path/.../...などのリンクを追加します。これは、スクリプトを実行したときに行われたためです。作成シンボリックリンク

オプション2

  • OSパッケージ管理システムを使用して、標準システムの場所にサポートライブラリをインストールします。 Ubuntuを含むDebianベースのシステムの場合、インストールlibgmp-dev、libmpfr-devおよびlibmpc-devパッケージ。 FedoraおよびSUSEを含むRPMベースのシステムの場合、gmp-devel、およびlibmpc-develmpc-devel on SUSE)パッケージ。
  • このオプションは、GCCをビルドするときに自動的に見つかる標準システムディレクトリにライブラリとヘッダーファイルをインストールします。
  • これは、 "Sudo apt-get install libgmp-dev"または "Sudo apt-get install libmpfr-を呼び出すときのOSパッケージインストール管理の利点です。 dev "インストールとリンクが自動的に行われます。さらに、Make、Make installまたは./ configure。Plusを使用して、サポートライブラリをビルドする必要はありません。プロセスは、すべてのプロセスを完了するのに数分かかります。
  • これで、GCCのインストールに進むことができます。

構成:

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 にアクセスしてください。

1
Juniar

私は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

0
Abhimanu Kumar