Linux下コンパイルインストールgcc 5.4.0

8604 ワード

gcc 5.4.0バージョンを例に、ソースコードでgccをコンパイルしてインストールする方法を紹介します.
一、gccを取り付ける
1、解凍
gcc-5.4.0.tar.gzを/usr/local/srcなどのシステム内のディレクトリにコピーし、このディレクトリに解凍します.
tar zxf gcc-5.4.0.tar.gz

2、インストールディレクトリの作成
gccのインストールディレクトリは、一般的に/usr/local/gcc-5.4.0です.このディレクトリの意味については、次の参照してください.https://blog.csdn.net/lina_acm/article/details/78224656
mkdir /usr/local/gcc-5.4.0/
mkdir /usr/local/src/gcc-5.4.0/build  # build        Makefile    

3、インストールファイルの設定
configureを実行してgccインストールをどこにインストールするか、どの言語をサポートするかなどを構成します.
cd /usr/local/src/gcc-5.4.0/build
/usr/local/src/gcc-5.4.0/configure  \
--prefix=/usr/local/gcc-5.4.0  \
--enable-threads=posix  \
--disable-multilib  \
--enable-languages=c,c++
# --prefix=/usr/local/gcc-5.4.0        
# --enable-languages=c,c++              
# --enable-threads=posix           POSIX/Unix98       
# --disable-multilib                     ( 64       32    )

より多くのパラメータの説明はconfigureパラメータに-hを加えて表示できます.
次のエラーが発生した場合、GMP、MPFR、MPCの3つのライブラリをインストールする必要があることを示します.後述の第2部の説明に従ってインストールできます.
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

3つの依存ライブラリをインストールした後、configureを再実行しますが、3つのライブラリのインストールパスをパラメータとして追加します.
cd /usr/local/src/gcc-5.4.0/build
/usr/local/src/gcc-5.4.0/configure  \
--prefix=/usr/local/gcc-5.4.0  \
--enable-threads=posix  \
--disable-multilib  \
--enable-languages=c,c++  \
--with-gmp=/usr/local/gmp-6.1.0  \
--with-mpfr=/usr/local/mpfr-3.1.4  \
--with-mpc=/usr/local/mpc-1.0.3

4、gccを取り付ける
cd /usr/local/src/gcc-5.4.0/build
make -j4
make install

-jパラメータは、マルチスレッドコンパイルmakeの実行時間を長く設定するために使用されます.
5、gccバージョンの切り替え
現在のgccのバージョンを確認してから、他の名前に変更します.そうしないと、後のステップは有効ではありません.
/usr/bin/gcc -v
...
gcc    4.9.2 20141101 (Red Hat 4.9.2-1) (GCC) 
...
mv /usr/bin/gcc /usr/bin/gcc-4.9.2

alternativesコマンドでgccバージョンを追加します.
alternatives --install  /usr/bin/gcc  gcc  /usr/bin/x86_64-redhat-linux-gcc  50
alternatives --install  /usr/bin/gcc  gcc  /usr/local/gcc-5.4.0/bin/gcc  40

Alternatives--install優先度autoモードで使用すると、数値が大きいほど優先度が高くなります
数値選択バージョンを入力:
[root@localhost bin]# alternatives --config  gcc

   2    “gcc”   。

     

*+ 1           /usr/bin/x86_64-redhat-linux-gcc
   2           /usr/local/gcc-5.4.0/bin/gcc

  Enter       [+],        :2

*は優先度が最も高いことを示し、+は現在のシステムで使用されているより多くのパラメータがalternativesに直接入力されて表示されることを示します.
最後に確認します.
gcc -v

同じようにg++のバージョンを設定します
6、その他
実際の使用において他にもいくつかの操作を完了する必要があるが、詳細は第3部を参照する.
二、GMP、MPFR、MPCを取り付ける
依存を自動的にインストールでき、gcc解凍後のルートディレクトリで次のコマンドを実行できます.
./contrib/download_prerequisites

自動インストールを使用する場合、configureのパラメータにこの3つのライブラリのパスを記入する必要はなく、手動インストールを参照してください.
MPFRはGMPに依存し、MPCはGMPとMPFRに依存するので、まずGMPをインストールし、次にMPFRをインストールし、最後にMPCが/usr/local/src/ディレクトリに解凍し、/usr/local/ディレクトリにインストールする例
1、gmp-6.1.0をインストールする
tar jxf gmp-6.1.0.tar.bz2
mkdir /usr/local/gmp-6.1.0
mkdir /usr/local/src/gmp-6.1.0/build
cd /usr/local/src/gmp-6.1.0/build
/usr/local/src/gmp-6.1.0/configure --prefix=/usr/local/gmp-6.1.0/
make
make install

2、mpfr-2.4.2を取り付ける
tar jxf mpfr-3.1.4.tar.bz2
mkdir /usr/local/mpfr-3.1.4
mkdir /usr/local/src/mpfr-3.1.4/build
cd /usr/local/src/mpfr-3.1.4/build
/usr/local/src/mpfr-3.1.4/configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-6.1.0
make
make install

3、mpc-0.8.1を取り付ける
tar zxf mpc-1.0.3.tar.gz
mkdir /usr/local/mpc-1.0.3
mkdir /usr/local/src/mpc-1.0.3/build
cd /usr/local/src/mpc-1.0.3/build
/usr/local/src/mpc-1.0.3/configure --prefix=/usr/local/mpc-1.0.3  \
--with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4
make
make install

.
三、その他の問題
1、GLIBCXX_3.4.21またはCXXABI_1.3.9見つからない
インストールが完了すると、次のエラーメッセージが表示されます.
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found

これは、新しくインストールされたgccダイナミックライブラリで古いものを置き換えていないためです.まず、現在使用されているダイナミックライブラリの内容を確認します.
[root@localhost bin]# strings /usr/lib64/libstdc++.so.6 | grep CXXABI
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_1.3.8
CXXABI_TM_1
[root@localhost bin]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

現在使用されているダイナミックライブラリには新しいバージョンが含まれていないことがわかります.解決方法は、新しいgccライブラリで古いものを置き換え、ソフト接続を確立すればいいです.(実際にlib、lib 64ディレクトリをコピーします)
cp /usr/local/gcc-5.4.0/lib64/libstdc++.so.6.0.21  /usr/lib64/
rm /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.21  /usr/lib64/libstdc++.so.6

2、場合によってはg++のバージョンはまだ切り替えられていない
これは、c++の指向が間違っている可能性があります.まず、現在のc++を確認します.
[root@localhost bin]# which c++
/usr/lib64/ccache/c++
[root@localhost bin]# ll /usr/lib64/ccache/c++
lrwxrwxrwx 1 root root 16 4   11 2017 /usr/lib64/ccache/c++ -> ../../bin/ccache

古いc++を削除し、g++を指すソフト接続を再構築すればよい.
mv /usr/lib64/ccache/c++  /usr/lib64/ccache/c++_bak
ln -s /usr/bin/g++  /usr/lib64/ccache/c++

.