「インストール - GCC」の版間の差分

ナビゲーションに移動 検索に移動
213行目: 213行目:
<br><br>
<br><br>


== GCC ARMのインストール ==
== GCC ARMツールチェーン ==
==== GCC ARMツールチェーンとは ====
Cortex-A向けGNUツールチェインは、C/C++、アセンブリ言語のためのオープンソースのツール群である。<br>
Cortex-A向けGNUツールチェインは、C/C++、アセンブリ言語のためのオープンソースのツール群である。<br>
これは、Cortex-Aファミリのプロセッサを対象としており、Arm Aプロファイルアーキテクチャを実装している。<br>
これは、Cortex-Aファミリのプロセッサを対象としており、Arm Aプロファイルアーキテクチャを実装している。<br>
このツールチェーンにはGCCが含まれており、WindowsおよびLinux向けに無償で提供されている。<br>
このツールチェーンにはGCCが含まれており、WindowsおよびLinux向けに無償で提供されている。<br>
<br>
<br>
==== GCC ARMツールチェーンのダウンロード ====
[https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads ARMの公式Webサイト]から、ユーザの環境に合うバージョンをダウンロードする。<br>
[https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads ARMの公式Webサイト]から、ユーザの環境に合うバージョンをダウンロードする。<br>
GCC ARMを解凍して、適切なディレクトリに配置する。(ここでは、~/InstallSoftware/GCC_ARMディレクトリに配置している)<br>
GCC ARMを解凍して、適切なディレクトリに配置する。<br>
<br>
<br>
以下の例では、GCC ARMを使用して、任意のソフトウェアをCortex-Aファミリ向けにビルドしている。<br>
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;"
|+ 表. GCC ARMツールチェーンのダウンロード
|-
! style="background-color:#00ffff;" | Raspberry Piの種類
! style="background-color:#00ffff;" | Raspbian Stretch(32-bit)
! style="background-color:#00ffff;" | Raspbian Buster(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]
|-
| 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]
|-
| 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]
|}
</center>
<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>
<br>
もし、configureスクリプトを実行する時、<u>undefined reference to 'rpl_malloc'</u>というエラーが表示される場合は、<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>
<code>ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes</code>オプションを付加する。<br>
<br>
これは、autotoolsの仕様で、GLIBC以外のシステム(例. uClibc等)を使用しているからである。<br>
これは、autotoolsの仕様で、GLIBC以外のシステム(例. uClibc等)を使用しているからである。<br>
  # 32bit Cortex-A(Hard Float版)向けにビルドする場合
  # 32bit Cortex-A(Hard Float版)向けにビルドする場合
235行目: 270行目:
  --with-sysroot=/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/libc --with-gnu-ld
  --with-sysroot=/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/libc --with-gnu-ld
   
   
  make -j 8 LDFLAGS="-L/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/lib" \
  make -j $(nproc) LDFLAGS="-L/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/lib" \
  CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/include"
  CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/arm-none-linux-gnueabihf/include"
   
   
248行目: 283行目:
  --with-sysroot=/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/libc --with-gnu-ld
  --with-sysroot=/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/libc --with-gnu-ld
   
   
  make -j 8 LDFLAGS="-L/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/lib64" \
  make -j $(nproc) LDFLAGS="-L/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/lib64" \
  CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/include"
  CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/aarch64-none-linux-gnu/include"
   
   
  make install
  make install
<br>
<br>
Raspberry Pi 3B向けにビルドする手順を以下に記載する。<br>
===== Raspberry Pi =====
# 以下のURLから、GCC ARMツールチェイン(Linaro社)をダウンロードする。<br>https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf
以下の例では、SourceForgeからダウンロードした<u>Raspberry Pi専用のGCC ARMツールチェーン</u>を使用して、<br>
#: ホストOSがWindows x86の場合 : gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz
任意のソフトウェアをRaspberry Pi向けにビルドしている。<br>
#: ホストOSがLinux x64の場合 : gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes \
#: ホストOSがLinux x86の場合 : gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz
../configure --prefix=<ソフトウェアのインストールディレクトリ> \
# ダウンロードしたGCC ARMツールチェインを解凍する。
CC=/<GCC_ARMのインストールディレクトリ>/bin/arm-linux-gnueabihf-gcc CXX=/<GCC_ARMのインストールディレクトリ>/bin/arm-linux-gnueabihf-g++ \
# 任意のソフトウェアをRaspberry Pi 3B向けにビルドするため、以下のコマンドを実行する。
--build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
#: <code>ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes \</code>
#: <code>../configure --prefix=<ソフトウェアのインストールディレクトリ> \</code>
make -j $(nproc)
#: <code>CC=/<GCC_ARMのインストールディレクトリ>/bin/arm-linux-gnueabihf-gcc-7.5.0 \</code>
#: <code>CXX=/<GCC_ARMのインストールディレクトリ>/bin/arm-linux-gnueabihf-g++ \</code>
make install
#: <code>--build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf</code>
#: <br>
#: <code>make -j 8 LDFLAGS="-L/<GCC_ARMのインストールディレクトリ>/arm-linux-gnueabihf/lib" \</code>
#: <code>CFLAGS="-I/<GCC_ARMのインストールディレクトリ>/arm-linux-gnueabihf/include"</code>
#: <br>
#: <code>make install</code>
<br><br>
<br><br>


案内メニュー