MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
インストール - GCCのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
インストール - GCC
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == CentOSやSUSEのパッケージ管理システムで提供されているGCCのバージョンは古い可能性がある。<br> 最新のGCCでは、C++11からC++17を完全にサポートしており、また、C++20を部分的にサポートしている。<br> また、最新のGCCでは、C11およびC++14のサポートがデフォルトで有効になっている。(-std=c11または-std=c++14を追加する必要はない)<br> <br><br> == 依存関係のライブラリのインストール == まず、システムが最新であることを確認する。<br> # CentOS sudo yum update # SUSE sudo zypper update <br> 依存関係のライブラリを、以下に示す2種類のいずれかの方法でインストールする。<br> ==== パッケージ管理システムの使用 ==== # CentOS sudo yum install gmp-devel mpfr-devel libmpc-devel isl-devel # SUSE sudo zypper install patterns-base-basesystem patterns-devel-base-devel_basis patterns-devel-C-C++-devel_C_C++ \ gcc gcc-c++ gawk ncurses-devel make tar pkg-config m4 gperf bison flex expect expect-devel \ gmp-devel mpfr-devel mpc-devel isl-devel <br> ==== GCCのモジュールの使用 ==== [https://gcc.gnu.org GCCの公式Webサイト]にアクセスして、GCCのソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf gcc-<バージョン>.tar.gz cd gcc-<バージョン> <br> ビルドに必要なライブラリをソースコードからビルドする場合、解凍したGCCのディレクトリに移動して、ライブラリをダウンロードする。<br> ./contrib/download_prerequisites <br> ダウンロードされた依存関係のライブラリを解凍する。<br> tar xf gmp-<バージョン>.tar.bz2 tar xf mpfr-<バージョン>.tar.bz2 tar xf mpc-<バージョン>.tar.gz tar xf isl-<バージョン>.tar.bz2 <br> ビルドに必要なライブラリを、ビルドしてインストールする。<br> * GMPのインストール ./gmp-<バージョン>/configure --prefix=<GCCのインストールディレクトリ> --enable-cxx make -j $(nproc) make check make install <br> * MPFRのインストール ./mpfr-<バージョン>/configure --prefix=<GCCのインストールディレクトリ> --with-gmp=<GCCのインストールディレクトリ> make -s -j $(nproc) make -s check -j $(nproc) make install <br> * MPCのインストール ./mpc-<バージョン>/configure --prefix=<GCCのインストールディレクトリ> --with-gmp=<GCCのインストールディレクトリ> --with-mpfr=<GCCのインストールディレクトリ> make -s -j $(nproc) make check -s -j $(nproc) make install <br> * ISLのインストール ./isl-<バージョン>/configure --prefix=<GCCのインストールディレクトリ> --with-gmp-prefix=<GCCのインストールディレクトリ> make -j $(nproc) make check make install <br><br> == GCCのインストール == [https://gcc.gnu.org GCCの公式Webサイト]にアクセスして、GCCのソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf gcc-<バージョン>.tar.xz cd gcc-<バージョン> <br> sha512.sumファイルを使用して、ダウンロードしたファイルのチェックを行う。<br> <code>sha512sum: gcc-<バージョン>.tar.gz: No such file or directory</code>というメッセージが表示されるが、<br> gcc-<バージョン>.tar.gzファイルをダウンロードしていないため表示されているだけなので、特に問題ない。<br> sha512sum --check sha512.sum <br> GCC 7.1をインストールする場合、/<GCC 7.1のソースディレクトリ>/libgcc/config/i386/linux-unwind.hファイルを、以下に示すように修正する必要がある。<br> <syntaxhighlight lang="c++"> // /<GCC 7.1のソースディレクトリ>/libgcc/config/i386/linux-unwind.hファイルの61行目 // 修正前 struct ucontext *uc_ = context->cfa; // 修正後 struct ucontext_t *uc_ = context->cfa; </syntaxhighlight> <br> GCCをビルドおよびインストールする。<br> オプションの説明を記載する。 * enable-languages=c,c++,fortran *: C、C++、FORTRANのコンパイラをビルド対象とする。 * disable-bootstrap *: <u>ただし、クロスコンパイラ向けでは使用できないことに注意すること。</u> *: 3-stage bootstrap buildの無効化。 * disable-multilib *: 64bit専用コンパイラとする。(ただし、<code>-m32</code>オプションが使用できなくなる) cd gcc-<バージョン> mkdir build && cd build <br> # GCC 7.5以降かつパッケージ管理システムで依存関係のライブラリをインストールしている場合 ../configure -v --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu \ --prefix=<GCCのインストールディレクトリ> --program-suffix="_X_X" \ --enable-languages=c,c++,fortran --disable-bootstrap make -j $(nproc) make install-strip # GCC 7.5以降かつ手動で依存関係のライブラリをインストールしている場合 ../configure -v --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu \ --prefix=<GCCのインストールディレクトリ> --program-suffix="_X_X" \ --enable-checking=release --enable-languages=c,c++,fortran --disable-bootstrap \ --with-gmp=<GMP, MPC MPFR, ISLのインストールディレクトリ> --with-mpc=<GMP, MPC MPFR, ISLのインストールディレクトリ> \ --with-mpfr=<GMP, MPC MPFR, ISLのインストールディレクトリ> --with-isl=<GMP, MPC MPFR, ISLのインストールディレクトリ> unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH=/<GMP, MPC MPFR, ISLのインストールディレクトリ>/lib64 make -j $(nproc) make install # GCC 6.5以前かつパッケージ管理システムで依存関係のライブラリをインストールしている場合 ../configure -v --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu \ --prefix=<GCCのインストールディレクトリ> --program-suffix="_X_X" \ --enable-checking=release --enable-languages=c,c++,fortran --disable-bootstrap \ --disable-libsanitizer --disable-libcilkrts make -j $(nproc) make install-strip <br> インストールしたGCCへ環境変数のパスを通す。<br> vi ~/.profile # .profileファイル export export PATH="/<GCCのインストールディレクトリ>/bin:$PATH" export LD_LIBRARY_PATH="/<GCCのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH" <br> 最後に、PCを再起動する。<br> <br><br> == 共有ライブラリの参照設定 == GCCをソースコードからインストールした場合、共有ライブラリが/<GCCのインストールディレクトリ>/lib64に作成されるが、<br> 環境変数のパスが通っていないため、Linuxから参照されない。<br> <br> そのため、以下のいずれかの方法で環境変数のパスを通す必要がある。<br> * /etc/ld.so.confファイルに記述する。(システム全体) * ~/.profileファイルまたは~/.bashrcファイル等に、LD_LIBRARY_PATHを記述する。(ユーザごとに設定が必要) <br> ==== ld.so.confファイルに設定する ==== /etc/ld.so.confファイルに<code>/<GCCのインストールディレクトリ/lib64</code>を追記することで、Linuxがライブラリを認識する。<br> 以下のコマンドを実行して、設定を追記する。<br> sudo vi /etc/ld.so.conf # /etc/ld.so.confファイル /<GCCのインストールディレクトリ/lib64 <br> 上記の設定を反映させるため、<code>ldconfig</code>コマンドを実行する。<br> ldconfig -v <br> <code>ldconfig</code>コマンドを実行した時に表示される情報から、<br> 以下のように、<code>/<GCCのインストールディレクトリ/lib64</code>ディレクトリが読み込まれていることを確認する。<br> /<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. libatomic.so.1 -> libatomic.so.1.2.0 libitm.so.1 -> libitm.so.1.0.0 libgomp.so.1 -> libgomp.so.1.0.0 libquadmath.so.0 -> libquadmath.so.0.0.0 libssp.so.0 -> libssp.so.0.0.0 libmpxwrappers.so.2 -> libmpxwrappers.so.2.0.1 <br> <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. <br> これは、libstdc++.so.6.0.25-gdb.pyは、pythonのスクリプトであるが、これを共有ライブラリとして認識していることが原因である。<br> file /<GCCのインストールディレクトリ>/lib64/libstdc++.so.6.0.25-gdb.py /<GCCのインストールディレクトリ>/lib64/libstdc++.so.6.0.25-gdb.py: Python script, ASCII text executable <br> 対処方法としては、該当ファイルの名前を変更して、共有ライブラリと認識されないようする。<br> mv /<GCCのインストールディレクトリ>/lib64/libstdc++.so.6.0.25-gdb.py /<GCCのインストールディレクトリ>/lib64/libstdc++.so.6.0.25-gdb.py_org <br> 再度、<code>ldconfig</code>コマンドを実行する。<br> ldconfig -v <br> また、<u>CentOS 7の場合</u>、/etc/ld.so.confファイルに<code>include ld.so.conf.d/*.conf</code>と設定されているが、<br> これは、ld.so.conf.dディレクトリ内のconf拡張子をもつファイルの内容を読み込むという設定である。<br> <br> ld.so.conf.dディレクトリ内に/<GCCのインストールディレクトリ>/lib64と記述したconfファイルを作成することにより、<br> Linuxに共有ライブラリのパスを認識させることができる。<br> <br> ここでは、/etc/ld.so.conf.d/UserAdd-lib64.confファイルを作成する。<br> sudo vi /etc/ld.so.conf.d/UserAdd-lib64.conf # UserAdd-lib64.confファイル /<GCCのインストールディレクトリ>/lib64 <br> 上記の設定を反映させるため、<code>ldconfig</code>コマンドを実行する。<br> ldconfig -v <br> ==== LD_LIBRARY_PATHに設定する ==== この方法は、ユーザごとに設定する必要がある。<br> ~/.profileファイルまたは~/.bashrcファイル等に、LD_LIBRARY_PATHの設定を追加することで、ユーザがログインする際に設定が読み込まれる。<br> vi ~/.profile # ~/.profileファイル export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/<GCCのインストールディレクトリ>/lib64 <br> 上記の設定を反映させるため、PCを再起動または再ログインする。<br> <br><br> == libstdc++の入れ替え == この操作を行うと、システムが不安定になる可能性があるため、必要な時にのみこれを行う。<br> <br> 現在のlibstdc++の対応関係を確認する。<br> strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX <br> インストールしたGCCのlibstdc++.so.<バージョン名>をコピーする。<br> sudo cp /<GCCのインストールディレクトリ>/lib64/libstdc++.so.6.0.28 /usr/lib64 <br> /usr/lib64ディレクトリにあるlibstdc++.so.6ファイルのバージョンを確認する。<br> ls -ahlF /usr/lib64/libstd* <br> libstdc++.so.6ファイルを入れ替える。<br> sudo mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6_org sudo ln -s /usr/lib64/libstdc++.so.<バージョン名> /usr/lib64/libstdc++.so.6 <br> 正常にコピーできたか確認する。<br> ls -ahlF /usr/lib64/libstd* <br> 入れ替えたlibstdc++の対応関係を確認する。<br> strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX <br><br> == クロスコンパイラ向けGCCツールチェーンのインストール == ==== クロスコンパイラ向けGCCツールチェーンとは ==== クロスコンパイラ向けGCCツールチェインは、C/C++、アセンブリ言語のためのオープンソースのツール群である。<br> これは、各アーキテクチャのプロセッサを対象として実装している。<br> <br> ==== 共通 (ホスト側) ==== GCCツールチェーンのビルドに必要なライブラリをインストールする。<br> sudo zypper install expect-devel gmp-devel mpc-devel mpfr-devel <br> ==== AArch64 (システムルートあり) ==== まず、[https://ftp.gnu.org/gnu/binutils/ GNUの公式Webサイト]から、Binutilsをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf binutils-<バージョン>.tar.xz cd binutils-<バージョン> <br> ビルドディレクトリを作成する。<br> mkdir build && cd build <br> クロスコンパイラ向けBinutilsのビルドおよびインストールする。<br> <u>インストールディレクトリは、クロスコンパイラ向けGCCのインストールディレクトリと同じディレクトリであることに注意する。</u><br> ../configure --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=<ターゲットのシステムルートディレクトリ> \ CFLAGS="-g0 -O3 -fstack-protector-strong" \ CXXFLAGS="-g0 -O3 -fstack-protector-strong" make -j $(nproc) make install <br> 次に、[https://gcc.gnu.org GCCの公式Webサイト]にアクセスして、GCCのソースコードをダウンロードして解凍する。<br> または、以下のコマンドを実行してダウンロードする。<br> wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-<バージョン>/gcc-<バージョン>.tar.xz tar xf gcc-<バージョン>.tar.xz cd gcc-<バージョン> <br> クロスコンパイラ向けGCCをビルドおよびインストールする。<br> クロスコンパイラ向けGCCをビルドする場合、ネイティブ向けGCCとバージョンを合わせた方がよい。<br> export PATH="/<上記でインストールしたBinutilsのインストールディレクトリ>/bin:$PATH" && \ CC=<ネイティブ向けGCCのパス> CXX=<ネイティブ向けG++のパス> \ ../configure -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=<ターゲットのシステムルートディレクトリ> \ CFLAGS="-g0 -O3 -fstack-protector-strong" \ CXXFLAGS="-g0 -O3 -fstack-protector-strong" make -j $(nproc) make install-strip <br> ==== H8 (システムルート無し) ==== <u>※注意</u><br> <u>GCC 9.1以降は、共有ライブラリとしてC++(libstdc++)をビルドすると失敗するため、C言語のみの対応となる。</u><br> <u>スタティックライブラリとしてはビルド可能であるが、その場合、例えば、<code>#inlcude <iostream></code>のインクルードができなくなる。</u><br> <br> <u>共有ライブラリとしてビルド不可の理由としては、ビット数を管理するソースコードファイルにおいて、</u><br> <u><code>std::size_t</code>の配列が、H8アーキテクチャ上では<code>std::size_t</code>のビット長が短いため、配列の要素が格納できないからである。</u><br> <u>また、C++17のメモリ管理機構において、コンパイル時の<code>static_assert</code>に失敗する。</u><br> <br> GCC 8.5では、GCCのMakefileに手を加えることにより、C言語およびC++言語を対応させることができる。<br> 通常、ビルドを行う場合、<code>basic_string.h</code>ファイルにおいて、<code>internal compiler error: unrecognizable insn</code>としてエラーになる。<br> これは、C++向けライブラリをビルドするためのxgccにおいて、内部エラーが起きているからである。<br> <u>しかし、ビルドディレクトリにあるh8300-elfディレクトリ内のMakefileファイルの526行目 <code>CXXFLAGS_FOR_TARGET</code>を<code>-g -O0</code>に変更する(最適化を無効にする)ことにより、ビルド可能となる。</u><br> <br> H8 GCCツールチェーンのビルドには32ビットGCCライブラリも必要であるため、以下に示すライブラリもインストールする。<br> sudo zypper install glibc-devel-32bit <br> まず、[https://ftp.gnu.org/gnu/binutils/ GNUの公式Webサイト]から、Binutilsをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf binutils-<バージョン>.tar.xz cd binutils-<バージョン> <br> クロスコンパイラ向けBinutilsのビルドおよびインストールする。<br> <u>インストールディレクトリは、クロスコンパイラ向けGCCのインストールディレクトリと同じディレクトリであることに注意する。</u><br> mkdir build && cd build ../configure --prefix=<クロスコンパイラ向けGCCのインストールディレクトリ> \ --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=h8300-elf \ --disable-gdb --disable-nls --disable-multilib --disable-werror \ --enable-lto make -j $(nproc) make install <br> 次に、[https://gcc.gnu.org GCCの公式Webサイト]にアクセスして、GCCのソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf gcc-<バージョン>.tar.xz cd gcc-<バージョン> <br> さらに、[https://sourceware.org/newlib/ NewLibの公式Webサイト]、または、[https://github.com/bminor/newlib/ NewLibのGithub]にアクセスして、NewLibのソースコードをダウンロードする。<br> もし、NewLibの公式Webサイトからファイルをダウンロードできない場合は、<code>wget</code>コマンド等を使用してダウンロードする。<br> wget ftp://sourceware.org/pub/newlib/newlib-<バージョン>.tar.gz <br> <u>ただし、現在(2022年11月現在)、NewLibの公式Webサイトからダウンロードしたファイルを使用するとビルドに失敗するため、Githubからダウンロードすること。</u><br> <br> ダウンロードしたファイルを解凍する。<br> tar xf newlib-<バージョン>.tar.gz <br> クロスコンパイラ向けGCC(1度目は、gccファイルのみ)をビルドおよびインストールする。<br> クロスコンパイラ向けGCCをビルドする場合、ネイティブ向けGCCとバージョンを合わせた方がよい。<br> # GCC ビルド ステージ:1 cd <GCCのソースコードがあるディレクトリ> mkdir build && cd build # GCC 8.5以前 export PATH="/<上記でインストールしたBinutilsのインストールディレクトリ>/bin:$PATH" && \ CC=<ネイティブ向けGCCのパス> CXX=<ネイティブ向けG++のパス> \ ../configure --prefix=<クロスコンパイラ向けGCCのインストールディレクトリ> \ --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=h8300-elf \ --enable-languages=c,c++ \ --disable-bootstrap --disable-nls --disable-werror --enable-lto --enable-gold \ --with-newlib \ --with-headers=/<上記でダウンロードしたNewLibのディレクトリ>/newlib/libc/include make -j $(nproc) make install # GCC 9.1以降 export PATH="/<上記でインストールしたBinutilsのインストールディレクトリ>/bin:$PATH" && \ CC=<ネイティブ向けGCCのパス> CXX=<ネイティブ向けG++のパス> \ ../configure --prefix=<クロスコンパイラ向けGCCのインストールディレクトリ> \ --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=h8300-elf \ --enable-languages=c \ --disable-bootstrap --disable-nls --disable-shared --enable-static --enable-lto --enable-gold \ --with-newlib \ --with-headers=/<上記でダウンロードしたNewLibのディレクトリ>/newlib/libc/include make -j $(nproc) make install <br> 次に、NewLibをビルドおよびインストールする。<br> mkdir build && cd build export PATH="/<上記でインストールしたBinutilsのインストールディレクトリ>/bin:$PATH" && \ CC=<ネイティブ向けGCCのパス> CXX=<ネイティブ向けG++のパス> \ ../configure --prefix=<クロスコンパイラ向けGCCのインストールディレクトリ> \ --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=h8300-elf make -j $(nproc) make install <br> 最後に、クロスコンパイラ向けGCC(2度目は、g++ファイルのみ)をビルドおよびインストールする。<br> # GCC ビルド ステージ:2 cd <GCCのソースコードがあるディレクトリ>/build # GCC 8.5以前は不要 # GCC 9.1以降 export PATH="/<上記でインストールしたBinutilsのインストールディレクトリ>/bin:$PATH" && \ CC=<ネイティブ向けGCCのパス> CXX=<ネイティブ向けG++のパス> \ ../configure --prefix=<クロスコンパイラ向けGCCのインストールディレクトリ> \ --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=h8300-elf \ --enable-languages=c,c++ \ --disable-bootstrap --disable-nls --disable-shared --enable-static --disable-libstdc__-v3 --enable-lto --enable-gold \ --with-newlib \ --with-headers=/<上記でダウンロードしたNewLibのディレクトリ>/newlib/libc/include make -j $(nproc) make install <br><br> == GCC ARMツールチェーンの使用方法 == ==== GCC ARMツールチェーンとは ==== Cortex-A向けGNUツールチェインは、C/C++、アセンブリ言語のためのオープンソースのツール群である。<br> これは、Cortex-Aファミリのプロセッサを対象としており、Arm Aプロファイルアーキテクチャを実装している。<br> このツールチェーンにはGCCが含まれており、WindowsおよびLinux向けに無償で提供されている。<br> <br> ==== GCC ARMツールチェーンのダウンロード ==== ===== Cortex-Aファミリ ===== [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads ARMの公式Webサイト]から、ユーザの環境に合うバージョンをダウンロードする。<br> GCC ARMを解凍して、適切なディレクトリに配置する。<br> <br> ===== Raspberry Pi ===== Raspberry Pi向けにクロスコンパイルする場合は、下表を参考にして、ユーザの環境に合ったGCC ARMツールチェーンをダウンロードする。<br> https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/<br> <center> {| class="wikitable" style="background-color:#fefefe;" |+ 表. Raspberry Pi専用GCC ARMツールチェーンのダウンロード |- ! style="background-color:#66CCFF;" | Raspberry Piの種類 ! style="background-color:#66CCFF;" | Raspbian Stretch(32-bit) ! style="background-color:#66CCFF;" | Raspbian Buster(32-bit) ! style="background-color:#66CCFF;" | Raspbian Bullseye(32-bit) |- | Raspberry Pi Zero/W/WH<br>Raspberry Pi 1 Model A / B / A+ / B+ | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-6.3.0-pi_0-1.tar.gz/download 6.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-9.3.0-pi_0-1.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.2.0-pi_0-1.tar.gz/download 10.2.0] | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-8.3.0-pi_0-1.tar.gz/download 8.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-9.3.0-pi_0-1.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.2.0-pi_0-1.tar.gz/download 10.2.0] | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.2.0-pi_0-1.tar.gz/download 10.2.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.3.0-pi_0-1.tar.gz/download 10.3.0] |- | Raspberry Pi 2 Model A / B<br>Raspberry Pi 3 Model A / B | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-6.3.0-pi_2-3.tar.gz/download 6.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.3.0-pi_2-3.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.2.0-pi_2-3.tar.gz/download 10.2.0] | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-8.3.0-pi_2-3.tar.gz/download 8.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.3.0-pi_2-3.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.2.0-pi_2-3.tar.gz/download 10.2.0] | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.2.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.2.0-pi_2-3.tar.gz/download 10.2.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.3.0-pi_2-3.tar.gz/download 10.3.0] |- | Raspberry Pi 3 Model A+ / B+<br>Raspberry Pi 4 Model A+ / B+<br>Raspberry Pi Compute 3 / 3lite / 3+ | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-6.3.0-pi_3%2B.tar.gz/download 6.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.3.0-pi_3%2B.tar.gz/download 8.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.2.0-pi_3%2B.tar.gz/download 10.2.0] | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-8.3.0-pi_3%2B.tar.gz/download 8.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.3.0-pi_3%2B.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.2.0-pi_3%2B.tar.gz/download 10.2.0] | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.2.0-pi_3%2B.tar.gz/download 10.2.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.3.0-pi_3%2B.tar.gz/download 10.3.0] |} </center> <br> 上表は、Raspbian OS 32bit向けのGCC ARMツールチェインであるが、Raspbian OS 64bit向けのGCC ARMツールチェインが必要な場合は、以下に示すURLにアクセスする。<br> https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Cross-Compiler%20Toolchains/<br> <br> また、Raspberry Pi向けには、Linaro社が提供しているGCC ARMツールチェインを使用することもできる。<br> https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf * Windows x86 / Linux x86の場合 *: gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz * Linux x64の場合 *: gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz <br> ==== GCC ARMツールチェーンを使用したコンパイル ==== ===== Cortex-Aファミリ ===== 以下の例では、ARMの公式WebサイトからダウンロードしたGCC ARMツールチェーンを使用して、<br> 任意のソフトウェアをCortex-Aファミリ向けにビルドしている。<br> <br> もし、configureスクリプトを実行する時、<u>undefined reference to 'rpl_malloc'</u>というエラーが表示される場合は、<br> <code>ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes</code>オプションを付加する。<br> これは、autotoolsの仕様で、GLIBC以外のシステム(例. uClibc等)を使用しているからである。<br> # 32bit Cortex-A(Hard Float版)向けにビルドする場合 ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes \ ../configure --prefix=<ソフトウェアのインストールディレクトリ> \ CC=/<GCC_ARMのインストールディレクトリ>/bin/arm-none-linux-gnueabihf-gcc \ CXX=/<GCC_ARMのインストールディレクトリ>/bin/arm-none-linux-gnueabihf-g++ \ --build=x86_64-unknown-linux-gnu --host=arm-none-linux-gnueabihf --target=arm-none-linux-gnueabihf \ --with-sysroot=/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/libc --with-gnu-ld make -j $(nproc) LDFLAGS="-L/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/lib" \ CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/include" make install <br> # 64bit Cortex-A向けにビルドする場合 ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes \ ../configure --prefix=<ソフトウェアのインストールディレクトリ> \ CC=/<GCC_ARMのインストールディレクトリ>/bin/aarch64-none-linux-gnu-gcc \ CXX=/<GCC_ARMのインストールディレクトリ>/bin/aarch64-none-linux-gnu-g++ \ --build=x86_64-unknown-linux-gnu --host=aarch64-none-linux-gnu --target=aarch64-none-linux-gnu \ --with-sysroot=/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/libc --with-gnu-ld make -j $(nproc) LDFLAGS="-L/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/lib64" \ CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/include" make install <br> ===== Raspberry Pi ===== 以下の例では、SourceForgeからダウンロードした<u>Raspberry Pi専用のGCC ARMツールチェーン</u>を使用して、<br> 任意のソフトウェアをRaspberry Pi向けにビルドしている。<br> ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes \ ../configure --prefix=<ソフトウェアのインストールディレクトリ> \ CC=/<GCC_ARMのインストールディレクトリ>/bin/arm-linux-gnueabihf-gcc CXX=/<GCC_ARMのインストールディレクトリ>/bin/arm-linux-gnueabihf-g++ \ --build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf make -j $(nproc) make install <br><br> == C++14 / C++17のサンプルコード == C++14では、ラムダ式のパラメータのタイプにautoが使用できる。<br> <syntaxhighlight lang="c++"> // sample.cpp #include <iostream> int main() { std::cout << [](auto a, auto b) { return a + b; } (5, 6) << std::endl; std::cout << [](auto a, auto b) { return a + b; } (5.23, 6.45) << std::endl; return 0; } </syntaxhighlight> <br> # 実行 g++-10.1 -Wall -pedantic sample.cpp -o sample ./sample # 出力 11 11.68 <br> このページの冒頭で述べたように、GCC 10.1は、C++17を完全にサポートしている。<br> 以下の例では、static_assertへのC++17変更の使用例をテストしている。<br> <syntaxhighlight lang="c++"> // sample.cpp #include <type_traits> #include <iostream> struct A { int foo; }; struct B { int foo = 0; }; template <typename T> void print(const T& a) { static_assert(std::is_pod<T>::value); std::cout << a.foo << '\n'; } int main() { A x{1}; B y{2}; B z; print<A>(x); print<B>(y); print<B>(z); return 0; } </syntaxhighlight> <br> コンパイルを行うには、-std=c++17オプションを付与する。<br> また、上記のコードの17行目と24行目でトリガーされたコンパイルエラーが表示される。<br> # 実行 g++-10.1 -std=c++17 -Wall -pedantic sample.cpp -o sample # 出力 sample.cpp: In instantiation of ‘void print(const T&) [with T = B]’: sample.cpp:24:13: required from here sample.cpp:14:33: error: static assertion failed 17 | static_assert(std::is_pod<T>::value); <br> もし、C++11の構文の詳細に興味がある場合は、Bjarne StroustrupによるC++プログラミング言語を読むことを推奨する。<br> <br><br> __FORCETOC__ [[カテゴリ:RHEL]][[カテゴリ:SUSE]]
インストール - GCC
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse