122

GCC(GNUコンパイラコレクション)を1つずつインストールし、現在のバージョンを
使用し、正しいバージョンの依存関係を使用し、パッケージマネージャー(yum、rpm、apt、dpkgなど)を使用せず、共有ライブラリを使用しないようにするにはどうすればよいですか?

一般的な開発者は、GCCを通常の方法でインストールするか、パッケージマネージャー(yum、rpm、apt、dpkg、port、brewなど)を使用するか、ここ(http://gcc.gnu.org/wiki/ )の指示に従うことをお勧めします。インストールGCC)。

私の質問は、共有ライブラリを使用せずに、GCCを1つずつインストールする方法です。

  • 共有ライブラリを使用せずに、また共有ライブラリを作成せずに、システム内を移動できる完全に独立したGCCが必要です。
  • これはGCCが「難しい方法」と呼んでいるものであり、一般的なユーザーにはお勧めできません。

GCCは以下に依存します:

  • GMP:GNU Multiple Precision Arithmetic Library
  • MPFR:GNU多倍長浮動小数点丸めライブラリ
  • MPC:GNU多精度Cライブラリ
  • ELF:実行可能でリンク可能なフォーマットライブラリ
  • PPL:パルマ多面体ライブラリ(オプション、メモリ最適化用)
4

6 に答える 6

135

簡単な方法

一般的な開発者の場合は、 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バージョン番号を使用するようにコマンドを更新してください。この回答のコマンドはGCC4.6.2用です。

GCCのドキュメントには、「必要なツールの十分に新しいバージョンは通常機能しますが、ライブラリの要件は一般的に厳しくなります。新しいバージョンが機能する場合もありますが、ドキュメントに記載されている正確なバージョンを使用する方が安全です」と記載されていることに注意してください。

GMP

GMPはGNUMultiplePrecisionArithmeticLibraryです。

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はGNUMultiple-precisionCライブラリです。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 andLinkableFormatの略です。このライブラリは、アーキテクチャに依存しないサイズとエンディアンのサポートを提供します。

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コンパイラコレクションです。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に感謝します)

于 2012-02-26T04:01:55.010 に答える
125

受け入れられた答えは、それを必要以上に複雑にし、すべてのバージョンで正しいわけではありませんでGCCを構築すること--disable-sharedは、通常、非常に悪い考えです。より簡単なアプローチについては、 http: //gcc.gnu.org/wiki/InstallingGCCを参照してください。

プロセス全体はこれよりも難しくないはずです(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
于 2012-05-19T04:28:13.253 に答える
26

私はクラスターに取り組んでいます。マスターノードのみがインターネットに接続されています。ノード上のソフトウェアは古く、通常は保守されていません。rootアクセス権がありません。私には2つの選択肢があります:

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

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

私はすべてを作りました

PREFIX=$HOME/cmp/soft/sft

そしてmake私が使用した

THREADS=8

以下では、gccはで構築されています

  • GMP
  • MPFR
  • MPC
  • ISL
  • CLOOG

ここから最新の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 "\"\$$#\""; }

以下の各コマンドは、ダウンロードしたライブラリのディレクトリで発行されます。

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

CLOOG

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
于 2014-02-26T17:02:58.950 に答える
7

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:エラー:オブジェクトファイルのサフィックスを計算できません:コンパイルできません」というメッセージが表示されました。したがって、gmpとmpfrのsrcをダウンロードし、gcc src toplevedir内からそれにソフトリンクを作成しました。

于 2012-11-16T20:02:54.880 に答える
3

GMP、MPFRMPCなどのGCC依存関係をインストールしようとした後。追加のインストール要件、エラー、ファイルの欠落に遭遇しました。MPFRのインストールに必要なgmp.hヘッダーファイルなど。その過程で遭遇するであろう多くの問題があります。ただし、自動リンクを使用してGCC-X.0.0以降のバージョンをビルドおよびインストールする簡単な方法があります。

オプション1。

makeを使用してビルドする手間を省くには、ダイナミックライブラリのインストールとリンクを作成します。

  • GCC-X.0.0バージョンをダウンロードします(最新バージョンはhttps://gcc.gnu.org/から)

  • gcc-X-000.tar.gzファイルを/somepath/の場所に抽出します。

  • .tar.gzファイルを抽出したら、/somepath/またはソースディレクトリにある./contrib/download_prerequisitesスクリプトを実行します。

  • このスクリプトは、GMP、MPFRMPCなどのサポートライブラリをダウンロードし、シンボリックリンクを作成します。これにより、gccインストールプロセスの一部としてすべてのgcc依存関係が自動的に構築されます。

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

オプション2。

  • OSパッケージ管理システムを使用して、標準のシステムの場所にサポートライブラリをインストールします。Ubuntuを含むDebianベースのシステムの場合、libgmp-dev、libmpfr-dev、およびlibmpc-devパッケージをインストールします。FedoraおよびSUSEを含むRPMベースのシステムの場合、 gmp-devel およびlibmpc-devel( SUSEではmpc-devel)パッケージをインストールします。
  • このオプションは、ライブラリとヘッダーファイルを標準のシステムディレクトリにインストールし、GCCのビルド時に自動的に検出されます。
  • これは、 「sudoapt-getinstalllibgmp-dev」または「sudoapt-getinstalllibmpfr-dev」インストールを呼び出してリンクが行われる場合の、OSパッケージインストール管理の利点です。さらに、Make、Make install、または./configureを使用してサポートライブラリを構築する必要はありません。さらに、このプロセスはすべてのプロセスを完了するのに数分かかります。
  • これで、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- c++やcなどの言語。

--disable-multilib ; システムとOSに基づいてmultilibを無効にすると、続行するためにmultilibについてプロンプトが表示されます。

Makeは完了するまでに長い時間がかかります。ただし、オプション-j#no_proを発行できます。これにより、PCまたはMacのプロセッサの数に基づいて、Makeが並行して実行されます。

このプロセスの実行方法の詳細については、 https ://gcc.gnu.org/wiki/InstallingGCCにアクセスしてください。

于 2018-04-24T20:46:44.243 に答える
1

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

于 2015-08-18T20:26:09.793 に答える