Linux の非常に詳細な gcc アップグレード プロセス

Linux の非常に詳細な gcc アップグレード プロセス

序文

c、c++ などではこのコンパイラ gcc が必要です。最近、DBA の友人から、RHEL7.6 オペレーティング システムに MySQL データベースをインストールする場合は、より高いバージョンの GCC が必要だと尋ねられました。調べてみると、落とし穴がたくさんあることがわかりました。この記事を要約して、皆さんと共有します。

1. 現在のgccバージョン

[root@rhel76 ~]# gcc -v
組み込み仕様の使用。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
ターゲット: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
スレッドモデル: posix
gcc バージョン 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 

上記から、現在のバージョンは4.8.5であることがわかります。今回は10.1.0にアップグレードしました

2. gccをインストールする

--ダウンロードアドレス:
https://mirrors.aliyun.com/gnu/gcc/gcc-10.1.0/

[root@rhel76 ~]# tar -vxf gcc-10.1.0.tar.gz
[root@rhel76 gcc-10.1.0]# mkdir ビルド
[root@rhel76 gcc-10.1.0]# cd ビルド/
[root@rhel76 ビルド]# ../configure --prefix=/usr/local/gcc-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib


ビルド システム タイプを確認しています... x86_64-pc-linux-gnu
ホスト システム タイプを確認しています... x86_64-pc-linux-gnu
ターゲット システム タイプを確認しています... x86_64-pc-linux-gnu
BSD 互換のインストールを確認しています... /usr/bin/install -c
ln が機能するかどうかを確認しています... はい
ln -s が機能するかどうかを確認しています... はい
出力を切り捨てない sed をチェックしています... /usr/bin/sed
gawk をチェックしています... gawk
libatomic サポートを確認しています... はい
libitm サポートを確認しています... はい
libsanitizer のサポートを確認しています... はい
libvtv サポートを確認しています... はい
libhsail-rt サポートを確認しています... はい
libphobos のサポートを確認しています... はい
gcc をチェックしています... gcc
Cコンパイラが動作するかどうかを確認します...はい
C コンパイラのデフォルトの出力ファイル名を確認しています... a.out
実行可能ファイルのサフィックスをチェックしています... 
クロスコンパイルしているかどうかを確認しています...いいえ
オブジェクトファイルのサフィックスをチェックしています...o
GNU C コンパイラを使用しているかどうかを確認しています...はい
gcc が -g を受け入れるかどうかを確認しています... はい
ISO C89 を受け入れるための gcc オプションをチェックしています... 何も必要ありません
g++ をチェックしています... g++
GNU C++ コンパイラを使用しているかどうかを確認します...はい
g++ が -g を受け入れるかどうかを確認しています... はい
g++ が -static-libstdc++ -static-libgcc を受け入れるかどうかを確認します...いいえ
gnatbind をチェックしています... いいえ
gnatmake をチェック中... いいえ
コンパイラドライバがAdaを理解するかどうかを確認...いいえ
ブートストラップされたオブジェクトの比較方法を確認しています... cmp --ignore-initial=16 $$f1 $$f2
objdir....libs をチェックしています
gmp.h の正しいバージョンを確認しています...いいえ
configure: エラー: GCC のビルドには、GMP 4.2+、MPFR 3.1.0+、および MPC 0.8.0+ が必要です。
--with-gmp、--with-mpfr、--with-mpcオプションを試して指定してください
これらのライブラリのソースコードは以下にあります。
それぞれのホスティングサイトだけでなく、
https://gcc.gnu.org/pub/gcc/infrastructure/. こちらも参照
追加情報については、http://gcc.gnu.org/install/prerequisites.htmlを参照してください。
GMP、MPFR、MPCをベンダー配布パッケージから入手した場合、
ライブラリとヘッダーの両方がインストールされていることを確認してください
ファイル。別々のパッケージに配置されている場合もあります。

ログから次のエラーを確認できるので、それぞれをインストールします: configure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.

3.gmpのインストール

[root@jeames007 ~]# tar -vxf gmp-5.0.1.tar.bz2
[root@jeames007 ~]# cd gmp-5.0.1/
[root@jeames007 gmp-5.0.1]# ./configure --prefix=/usr/local/gmp-5.0.1
[root@jeames007 gmp-5.0.1]# 作成する
[root@jeames007 gmp-5.0.1]# インストールする
make[4]: ディレクトリ `/root/gmp-5.0.1' を離れる
make[3]: ディレクトリ `/root/gmp-5.0.1' を離れる
make[2]: ディレクトリ `/root/gmp-5.0.1' を離れます
make[1]: ディレクトリ `/root/gmp-5.0.1' を離れます

4.MPFRコンパイル

[root@jeames007 ~]# tar -vxf mpfr-3.1.5.tar.xz

[root@jeames007 ~]# cd mpfr-3.1.5/
[root@jeames007 ~]#./configure --prefix=/usr/local/mpfr-3.1.5 --with-gmp=/usr/local/gmp-5.0.1
[root@jeames007 mpfr-3.1.5]# 作る
[root@jeames007 mpfr-3.1.5]# インストールする

5.MPCコンパイル

[root@jeames007 ~]# tar -vxf mpc-1.0.1.tar.gz
[root@jeames007 ~]# cd mpc-1.0.1
[root@jeames007 ~]# ./configure --prefix=/usr/local/mpc-1.0.1 --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.5
[root@jeames007 mpc-1.0.1]# 作成
[root@jeames007 mpc-1.0.1]# インストールする

6. GCC の設定

[root@rhel76 ~]# cd gcc-10.1.0
[root@rhel76 gcc-10.1.0]# cd ビルド/
../configure --prefix=/usr/local/gcc-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.5 --with-mpc=/usr/local/mpc-1.0.1


ビルド システム タイプを確認しています... x86_64-pc-linux-gnu
ホスト システム タイプを確認しています... x86_64-pc-linux-gnu
ターゲット システム タイプを確認しています... x86_64-pc-linux-gnu
BSD 互換のインストールを確認しています... /usr/bin/install -c
ln が機能するかどうかを確認しています... はい
ln -s が機能するかどうかを確認しています... はい
出力を切り捨てない sed をチェックしています... /usr/bin/sed
gawk をチェックしています... gawk
libatomic サポートを確認しています... はい
libitm サポートを確認しています... はい
libsanitizer のサポートを確認しています... はい
libvtv サポートを確認しています... はい
libhsail-rt サポートを確認しています... はい
libphobos のサポートを確認しています... はい
gcc をチェックしています... gcc
Cコンパイラが動作するかどうかを確認します...はい
C コンパイラのデフォルトの出力ファイル名を確認しています... a.out
実行可能ファイルのサフィックスをチェックしています... 
クロスコンパイルしているかどうかを確認しています...いいえ
オブジェクトファイルのサフィックスをチェックしています...o
GNU C コンパイラを使用しているかどうかを確認しています...はい
gcc が -g を受け入れるかどうかを確認しています... はい
ISO C89 を受け入れるための gcc オプションをチェックしています... 何も必要ありません
g++ をチェックしています... g++
GNU C++ コンパイラを使用しているかどうかを確認します...はい
g++ が -g を受け入れるかどうかを確認しています... はい
g++ が -static-libstdc++ -static-libgcc を受け入れるかどうかを確認します...いいえ
gnatbind をチェックしています... いいえ
gnatmake をチェック中... いいえ
コンパイラドライバがAdaを理解するかどうかを確認...いいえ
ブートストラップされたオブジェクトの比較方法を確認しています... cmp --ignore-initial=16 $$f1 $$f2
objdir....libs をチェックしています
gmp.h の正しいバージョンを確認しています... はい
mpfr.h の正しいバージョンをチェックしています...バグがありますが許容範囲です
mpc.h の正しいバージョンを確認しています... はい
gmp/mpfr/mpc ライブラリの正しいバージョンを確認しています... はい
isl 0.15 以降をチェックしています...いいえ
必要なislバージョンは0.15以降です
*** この構成は次のサブディレクトリではサポートされていません:
     gnattools gotools target-libada target-libhsail-rt target-libphobos target-zlib target-libbacktrace target-libgfortran target-libgo target-libffi target-libobjc target-liboffloadmic
    (他のディレクトリでも問題なく動作するはずです。)
デフォルトの BUILD_CONFIG を確認しています... bootstrap-debug
--enable-vtable-verify をチェックしています...いいえ
bison をチェックしています... bison -y
バイソンをチェック中...バイソン
gm4 をチェックしています... いいえ
gnum4 をチェックしています... いいえ
m4 をチェックしています... m4
フレックスをチェックしています...フレックス
フレックスをチェックしています...フレックス
makeinfo をチェックしています... いいえ
/root/gcc-10.1.0/missing: 行 81: makeinfo: コマンドが見つかりません
期待値を確認中...いいえ
実行テストをチェックしています...いいえ
ar...ar をチェックしています
チェック中...
dlltool をチェックしています...いいえ
ld...ld をチェックしています
脂肪検査…いいえ
nm を確認しています... nm
ranlib をチェックしています... ranlib
ストリップをチェックしています...ストリップ
風車のチェック中...いいえ
windmc をチェックしています... いいえ
objcopy をチェックしています... objcopy
objdump をチェックしています... objdump
otool をチェックしています...いいえ
readelf を確認しています... readelf
cc を確認しています... cc
c++ をチェックしています... c++
gcc をチェックしています... gcc
gfortran をチェックしています... gfortran
gccgo をチェックしています... いいえ
gdc をチェックしています...いいえ
チェック中...いいえ
ar...ar をチェックしています
チェック中...いいえ
チェック中...
dlltool をチェックしています...いいえ
dlltool をチェックしています...いいえ
ld をチェックしています...いいえ
ld...ld をチェックしています
脂肪検査…いいえ
脂肪検査…いいえ
nm をチェックしています... いいえ
nm を確認しています... nm
objcopy をチェックしています...いいえ
objcopy をチェックしています... objcopy
objdump をチェックしています...いいえ
objdump をチェックしています... objdump
otool をチェックしています...いいえ
otool をチェックしています...いいえ
ranlib をチェックしています... いいえ
ranlib をチェックしています... ranlib
readelf をチェックしています... いいえ
readelf を確認しています... readelf
ストリップをチェック中...いいえ
ストリップをチェックしています...ストリップ
風車のチェック中...いいえ
風車のチェック中...いいえ
windmc をチェックしています... いいえ
windmc をチェックしています... いいえ
ターゲット ar... ホスト ツールの場所を確認する
ターゲットがどこにあるかを確認中...ホストツール
ターゲット cc がどこにあるかを確認しています...コンパイルされました
ターゲットの C++ がどこにあるかを確認しています...コンパイルしたばかりです
libstdc++ のターゲット c++ がどこにあるかを確認しています... コンパイルされました
ターゲット dlltool がどこにあるかを確認しています... ホスト ツール
ターゲット gcc がどこにあるかを確認しています... コンパイルされました
ターゲット gfortran がどこにあるかを確認しています... ホスト ツール
ターゲット gccgo がどこにあるかを確認しています... ホスト ツール
ターゲット gdc がどこにあるかを確認しています...ホスト ツール
ターゲット ld がどこにあるかを確認しています... ホスト ツール
ターゲット リポがどこにあるか確認中...ホスト ツール
ターゲット nm がどこにあるかを確認しています... ホスト ツール
ターゲットの objcopy がどこにあるかを確認しています... ホスト ツール
ターゲット objdump がどこにあるかを確認しています... ホスト ツール
ターゲット otool がどこにあるかを確認しています...ホスト ツール
ターゲットの ranlib がどこにあるかを確認しています...ホスト ツール
ターゲットの readelf がどこにあるかを確認しています... ホスト ツール
ターゲットストリップがどこにあるかを確認しています...ホストツール
ターゲット ウィンドレスがどこにあるかを確認しています... ホスト ツール
ターゲットの windmc... ホスト ツールがどこにあるかを確認しています
Makefile のメンテナ固有の部分を有効にするかどうかを確認しています...いいえ
configure: ./config.status を作成しています
config.status: Makefile を作成しています

[root@jeames007 ~]# make -j4
Make には非常に長い時間がかかります。しばらくお待ちください。コンパイルに 1 時間かかりました。したがって、条件が許せば、コンパイル時に make -j8 を使用できます。

[root@jeames007 ビルド]# インストールする

現時点ではGCCのバージョンはまだ更新されていないため、以下の操作が必要です

7. GCCバージョンの更新

mv /usr/bin/gcc /usr/bin/gcc485
mv /usr/bin/g++ /usr/bin/g++485
c++ を /usr/bin/c++ にコピーします。
mv /usr/bin/cc /usr/bin/cc485


ln -s /usr/local/gcc-10.1.0/bin/gcc /usr/bin/gcc
ローカルディレクトリ /usr/local/gcc-10.1.0/bin/g++ /usr/bin/g++
: := /usr/local/gcc-10.1.0/bin/c++ /usr/bin/c++ を置き換えます。
ln -s /usr/local/gcc-10.1.0/bin/gcc /usr/bin/cc


mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
ln -s /usr/local/gcc-10.1.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6


スクリプトが正常に実行されると、現在使用されている gcc のバージョンを表示できます。表示するコマンドは次のとおりです: gcc -v

[root@jeames007 ~]# gcc -v
組み込み仕様の使用。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc-10.1.0/libexec/gcc/x86_64-pc-linux-gnu/10.1.0/lto-wrapper
ターゲット: x86_64-pc-linux-gnu
次のように設定されています: ../configure --prefix=/usr/local/gcc-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.5 --with-mpc=/usr/local/mpc-1.0.1
スレッドモデル: posix
サポートされているLTO圧縮アルゴリズム: zlib
gcc バージョン 10.1.0 (GCC)

ここに画像の説明を挿入

Linux での非常に詳細な gcc アップグレード プロセスに関するこの記事はこれで終わりです。Linux gcc アップグレードに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux の CentOS 6.5 で gcc を gcc-6.1.0 に手動でアップグレードする
  • CentOS7 環境で gcc (バージョン 10.2.0) をアップグレードする詳細な手順

<<:  スクロールラグの問題を解決するためのオーバーフロースクロールの詳細な説明

>>:  HTML 9グリッドレイアウトの実装方法

推薦する

Vue でインデックスをキー属性値として使用することが推奨されないのはなぜですか?

目次序文キーの役割差分アルゴリズムにおけるキーの役割ヘッドノードを同期するテールノードを同期する新し...

フロントエンドの面接の質問の最も包括的なコレクション

HTML+CSS 1. WEB 標準と W3C の理解と知識<br /> タグを閉じ、小...

Nginx 仮想ホストを構成する 3 つの方法 (ポートベース) の詳細な説明

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...

Windows 10 システムで nginx ファイル サーバーを構成するためのグラフィック チュートリアル

Nginx の公式 Web サイトから Windows バージョンの Nginx をダウンロードしま...

Linux インデックスノード inode の詳細な説明

1. inodeの紹介inode を理解するには、まずファイル ストレージから始める必要があります。...

MySQL の高可用性アーキテクチャの完全な説明: MHA アーキテクチャ

目次1. はじめに2. 構成3. 作業プロセス4. 建築5. 表示例MHA (Master HA) ...

JavaScript を使用してハイパーリンクのリダイレクトを防ぐ方法 (複数の書き方)

JavaScript を使用すると、ハイパーリンクがジャンプするのを防ぐことができます。方法は次の...

MySQL の if 関数の正しい使い方の詳細な説明

今日私が書こうとしている内容では、プログラムは 7 時間近く実行され、データベースに 1,000 万...

nginxプロキシsocket.ioサービスの落とし穴の詳細な説明

目次Nginx は 2 つの socket.io サーバーをプロキシします。 socket.ioの動...

MYSQL8.0.13 無料インストール版 設定チュートリアル例 詳細説明

1. ダウンロード、例として8.0を取り上げますダウンロードアドレス: https://dev.my...

MySQLクエリ文を書き換える3つの戦略

目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...

MySQL でストアド プロシージャを作成し、ループでレコードを追加する方法

この記事では、例を使用して、MySQL でストアド プロシージャを作成し、ループでレコードを追加する...

Debian ベースの Linux システム ソフトウェア インストール コマンドの詳細な説明 (推奨)

Debian の紹介Debian は、広い意味では、フリーなオペレーティング システムの作成に専念...

横スクロールウェブサイトデザインの概要

水平スクロールはあらゆる状況に適しているわけではありませんが、適切に行えば、Web サイトを他のサイ...

CentOS7 systemdにカスタムシステムサービスを追加する方法

システムド: CentOS 7のサービスsystemctlスクリプトは、/usr/lib/syste...