13,009
回編集
編集の要約なし |
編集の要約なし |
||
6行目: | 6行目: | ||
<br><br> | <br><br> | ||
== 依存関係のライブラリのインストール == | == GCCのインストール (ソースコードからインストール) == | ||
==== 依存関係のライブラリのインストール ==== | |||
まず、システムが最新であることを確認する。<br> | まず、システムが最新であることを確認する。<br> | ||
# RHEL | # RHEL | ||
15行目: | 16行目: | ||
<br> | <br> | ||
依存関係のライブラリを、以下に示す2種類のいずれかの方法でインストールする。<br> | 依存関係のライブラリを、以下に示す2種類のいずれかの方法でインストールする。<br> | ||
==== パッケージ管理システムの使用 ==== | <br> | ||
===== パッケージ管理システムの使用 ===== | |||
# RHEL | # RHEL | ||
sudo dnf install gmp-devel mpfr-devel libmpc-devel isl-devel | sudo dnf install gmp-devel mpfr-devel libmpc-devel isl-devel | ||
24行目: | 26行目: | ||
gmp-devel mpfr-devel mpc-devel isl-devel | gmp-devel mpfr-devel mpc-devel isl-devel | ||
<br> | <br> | ||
===== スクリプトの使用 ===== | |||
==== | |||
[https://gcc.gnu.org GCCの公式Webサイト]にアクセスして、GCCのソースコードをダウンロードする。<br> | [https://gcc.gnu.org GCCの公式Webサイト]にアクセスして、GCCのソースコードをダウンロードする。<br> | ||
ダウンロードしたファイルを解凍する。<br> | ダウンロードしたファイルを解凍する。<br> | ||
64行目: | 65行目: | ||
make check | make check | ||
make install | make install | ||
<br> | |||
==== ビルドおよびインストール ==== | |||
== | |||
[https://gcc.gnu.org GCCの公式Webサイト]にアクセスして、GCCのソースコードをダウンロードする。<br> | [https://gcc.gnu.org GCCの公式Webサイト]にアクセスして、GCCのソースコードをダウンロードする。<br> | ||
ダウンロードしたファイルを解凍する。<br> | ダウンロードしたファイルを解凍する。<br> | ||
139行目: | 139行目: | ||
<br> | <br> | ||
最後に、PCを再起動する。<br> | 最後に、PCを再起動する。<br> | ||
<br> | <br> | ||
==== GCCのライブラリの設定 ==== | |||
* /etc/ld.so. | GCCをソースコードからインストールした場合、共有ライブラリが/<GCCのインストールディレクトリ>/lib64に作成されるが、環境変数のパスが設定されていない。<br> | ||
* ~/. | そのため、以下に示すいずれかの方法で環境変数のパスを通す必要がある。<br> | ||
* /etc/ld.so.confファイル (システム全体) | |||
* ~/.profileファイル、または、~/.bashrcファイル等 (ユーザごとの設定) | |||
*: 環境変数<code>LD_LIBRARY_PATH</code>を設定する。 | |||
<br> | <br> | ||
==== ld.so. | ===== ld.so.confファイルに設定する場合 ===== | ||
/etc/ld.so.confファイルに<code>/<GCCのインストールディレクトリ/lib64</code>を追記することで、Linuxがライブラリを認識する。<br> | /etc/ld.so.confファイルに<code>/<GCCのインストールディレクトリ/lib64</code>を追記することで、Linuxがライブラリを認識する。<br> | ||
sudo vi /etc/ld.so.conf | sudo vi /etc/ld.so.conf | ||
<br> | |||
# /etc/ld.so.confファイル | |||
/<GCCのインストールディレクトリ/lib64 | /<GCCのインストールディレクトリ/lib64 | ||
<br> | <br> | ||
設定を反映させるため、<code>ldconfig</code>コマンドを実行する。<br> | |||
ldconfig -v | ldconfig -v | ||
<br> | <br> | ||
<code>ldconfig</code>コマンドを実行した時に表示される情報から、<br> | <code>ldconfig</code>コマンドを実行した時に表示される情報から、<br> | ||
以下に示すように、<code>/<GCCのインストールディレクトリ/lib64</code>ディレクトリが読み込まれていることを確認する。<br> | |||
/<GCCのインストールディレクトリ>/lib64: | /<GCCのインストールディレクトリ>/lib64: | ||
ldconfig: /<GCCのインストールディレクトリ>/lib64/libstdc++.so.6.0.25-gdb.py is not an ELF file - it has the wrong magic bytes at the start. | ldconfig: /<GCCのインストールディレクトリ>/lib64/libstdc++.so.6.0.25-gdb.py is not an ELF file - it has the wrong magic bytes at the start. | ||
172行目: | 170行目: | ||
libmpxwrappers.so.2 -> libmpxwrappers.so.2.0.1 | libmpxwrappers.so.2 -> libmpxwrappers.so.2.0.1 | ||
<br> | <br> | ||
<code>ldconfig</code> | <code>ldconfig</code>コマンドを実行した結果、もし、以下に示すようなメッセージが表示される場合がある。<br> | ||
ldconfig: /<GCCのインストールディレクトリ>/lib64/libstdc++.so.6.0.25-gdb.py is not an ELF file - it has the wrong magic bytes at the start. | ldconfig: /<GCCのインストールディレクトリ>/lib64/libstdc++.so.6.0.25-gdb.py is not an ELF file - it has the wrong magic bytes at the start. | ||
<br> | <br> | ||
186行目: | 184行目: | ||
ldconfig -v | ldconfig -v | ||
<br> | <br> | ||
また、<u> | また、<u>RHELの場合</u>、/etc/ld.so.confファイルに<code>include ld.so.conf.d/*.conf</code>と設定されているが、<br> | ||
これは、ld.so.conf.dディレクトリ内のconf拡張子をもつファイルの内容を読み込むという設定である。<br> | これは、ld.so.conf.dディレクトリ内のconf拡張子をもつファイルの内容を読み込むという設定である。<br> | ||
<br> | <br> | ||
194行目: | 192行目: | ||
ここでは、/etc/ld.so.conf.d/UserAdd-lib64.confファイルを作成する。<br> | ここでは、/etc/ld.so.conf.d/UserAdd-lib64.confファイルを作成する。<br> | ||
sudo vi /etc/ld.so.conf.d/UserAdd-lib64.conf | sudo vi /etc/ld.so.conf.d/UserAdd-lib64.conf | ||
<br> | |||
# UserAdd-lib64.confファイル | |||
/<GCCのインストールディレクトリ>/lib64 | /<GCCのインストールディレクトリ>/lib64 | ||
<br> | <br> | ||
201行目: | 200行目: | ||
ldconfig -v | ldconfig -v | ||
<br> | <br> | ||
==== | ===== ~/.profileファイル、または、~/.bashrcファイル等に設定する場合 ===== | ||
この方法は、ユーザごとに設定する必要がある。<br> | この方法は、ユーザごとに設定する必要がある。<br> | ||
~/. | <br> | ||
~/.profileファイル、または、~/.bashrcファイル等に、環境変数<code>LD_LIBRARY_PATH</code>を設定することにより、ユーザがログインする際に設定が読み込まれる。<br> | |||
vi ~/.profile | vi ~/.profile | ||
<br> | |||
<syntaxhighlight lang="sh"> | |||
# ~/.profileファイル | |||
export LD_LIBRARY_PATH="/<GCCのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH" | |||
export LD_LIBRARY_PATH= | </syntaxhighlight> | ||
<br> | <br> | ||
上記の設定を反映させるため、PCを再起動または再ログインする。<br> | 上記の設定を反映させるため、PCを再起動または再ログインする。<br> | ||
<br> | |||
==== libstdc++の入れ替え ==== | |||
== libstdc++の入れ替え == | |||
この操作を行うと、システムが不安定になる可能性があるため、必要な時にのみこれを行う。<br> | この操作を行うと、システムが不安定になる可能性があるため、必要な時にのみこれを行う。<br> | ||
<br> | <br> | ||
256行目: | 258行目: | ||
クロスコンパイラ向けBinutilsのビルドおよびインストールする。<br> | クロスコンパイラ向けBinutilsのビルドおよびインストールする。<br> | ||
<u>インストールディレクトリは、クロスコンパイラ向けGCCのインストールディレクトリと同じディレクトリであることに注意する。</u><br> | <u>インストールディレクトリは、クロスコンパイラ向けGCCのインストールディレクトリと同じディレクトリであることに注意する。</u><br> | ||
../configure --prefix=<クロスコンパイラ向けGCCのインストールディレクトリ> \ | ../configure CFLAGS="-g0 -O3 -fstack-protector-strong" \ | ||
CXXFLAGS="-g0 -O3 -fstack-protector-strong" \ | |||
--prefix=<クロスコンパイラ向けGCCのインストールディレクトリ> \ | |||
--build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=aarch64-linux-gnu \ | |||
--disable-gdb --disable-nls --disable-multilib --disable-werror \ | |||
--enable-gold --enable-lto --enable-plugins --enable-relro \ | |||
--with-sysroot=<ターゲットのシステムルートディレクトリ> | |||
make -j $(nproc) | make -j $(nproc) | ||
276行目: | 278行目: | ||
クロスコンパイラ向けGCCをビルドする場合、ネイティブ向けGCCとバージョンを合わせた方がよい。<br> | クロスコンパイラ向けGCCをビルドする場合、ネイティブ向けGCCとバージョンを合わせた方がよい。<br> | ||
export PATH="/<上記でインストールしたBinutilsのインストールディレクトリ>/bin:$PATH" && \ | export PATH="/<上記でインストールしたBinutilsのインストールディレクトリ>/bin:$PATH" && \ | ||
CC=<ネイティブ向けGCCのパス> CXX=<ネイティブ向けG++のパス> \ | CC=<ネイティブ向けGCCのパス> CXX=<ネイティブ向けG++のパス> \ | ||
../configure -v --prefix=<クロスコンパイラ向けGCCのインストールディレクトリ> \ | ../configure CFLAGS="-g0 -O3 -fstack-protector-strong" \ | ||
CXXFLAGS="-g0 -O3 -fstack-protector-strong" \ | |||
-v --prefix=<クロスコンパイラ向けGCCのインストールディレクトリ> \ | |||
--build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=aarch64-linux-gnu \ | |||
--enable-languages=c,c++ --disable-bootstrap --disable-multilib --disable-nls \ | |||
--with-sysroot=<ターゲットのシステムルートディレクトリ> | |||
make -j $(nproc) | make -j $(nproc) |