LinuxホストマシンにRaspberry Piクロスコンパイラをインストールする方法


114

私のUbuntuマシンでRaspberry Piをクロスコンパイルできるようにしようとしています。

最初の試みでは、Ubuntuリポジトリにあるarm-linux-gnueabiコンパイラを使用していました。私はこれを手に入れました。すべての依存関係を構築し、cmakeプロジェクトでクロスコンパイラを使用することができました。

しかし、私はhfバージョンを使用する必要があると思うので、arm-linux-gnueabihfに切り替えました。その後、これはarmv6であるため、Raspberry Piでは機能しないことに気付きました。

少しグーグルで調べた後、GitHubのビルド済みツールチェーンを見つけました。

ツールチェーンをダウンロードしましたが、「インストール」方法がよくわかりません。ファイルをホームディレクトリに抽出しました。ディレクトリ構造は次のようになります。

/gcc-linearo-arm-linux-gnueabihf-raspbian
    /arm-linux-gnueabihf
        /bin
            (contains g++, gcc, etc)
        /lib
            (contains libstdc++ library)
    /bin
        (contains arm-linux-gnueabihf-g++, arm-linux-gnueabihf-...)
    /lib
        (gcc lib stuff)

ディレクトリをINNER binフォルダーに変更すると、ターミナルからテストプログラムを問題なくコンパイルできます。

~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/
arm-linux-gnueabihf/bin$ g++ test.cpp -o test

次に、ツールのプレフィックスバージョンが含まれるOUTER binフォルダーでテストプログラムをコンパイルしようとしました。

 ~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin$ 
 arm-linux-gnueabihf-g++ test.cpp -o test

ただし、今すぐ(内部のbinディレクトリの外側から)コンパイラーを使用しようとすると、ツールチェーンに付属しているlibstdc ++共有ライブラリーを見つけることができません。

arm-linux-gnueabihf-gcc: error while loading shared libraries: 
libstdc++.so.6: cannot open shared object file: No such file or directory.

さらに、binディレクトリに移動しなくてもコンパイラを使用できるようにしたいと考えています。そこで、OUTER binディレクトリ(プレフィックスバージョンが必要なため)と両方のlibディレクトリをPATHに追加してみました。

export PATH=$PATH:~/tools/.../bin
export PATH=$PATH:~/tools/.../lib
export PATH=$PATH:~/tools/.../.../lib

ただし、これは同じエラーになります。Ubuntuリポジトリからクロスコンパイラを使用するときと同じように、どこからでもツールチェーンを使用できるようにするには、どのようにツールチェーンを「インストール」する必要がありますか?


CMAKE_C {XX} _FLAGSを使用して--sysrootを設定し、dirをインストールしてみてください。
auselen

--sysrootにいくつかの異なるパスを試しましたが、それは役に立ちませんでした。sysrootにどのパスを指定する必要があるのか​​本当にわかりません。ツールチェーンのディレクトリ構造については、上記を参照してください。また、一部のGooglingは--sysrootがlibstdc ++を支援しないことを示しているようです。
pqvst 2013年

/ gcc-linearo-arm-linux-gnueabihf-raspbianまたは/ gcc-linearo-arm-linux-gnueabihf-raspbian / arm-linux-gnueabihf
auselen

ここでlaunchpad.net/gcc-arm-embeddedに移動し、tarballをダウンロードして解凍します。bin dir ... doneへのパスを設定します。またはcodesourcery.com(現在はメンターグラフィックス)にアクセスして、ライトバージョンを取得し、untar / bzを実行し、bin dir ... doneへのパスを設定します。
old_timer 2013年

回答:


235

簡単に理解できるように、これをチュートリアルとして書いてみます。

注:このチュートリアルは、古いRaspbianイメージでのみ機能します。Debian Busterベースの新しいRaspbianについては、このスレッドの次のハウツーを参照してください。https//stackoverflow.com/a/58559140/869402

事前要件

始める前に、以下がインストールされていることを確認する必要があります。

apt-get install git rsync cmake ia32-libs

パイをクロスコンパイルしましょう!

まず、ホームディレクトリにというフォルダを作成しますraspberrypi

このフォルダーに移動し、前述のENTIRE toolsフォルダー全体をプルダウンします。

git clone git://github.com/raspberrypi/tools.git

gcc-linaro-arm-linux-gnueabihf-raspbian私が間違って読んでいないのなら、あなたは3つのうちの次のものを使いたかったのです。

ホームディレクトリに移動し、以下を追加します。

export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

という名前のファイルの最後に ~/.bashrc

これで、ログアウトして再度ログインする(つまり、ターミナルセッションを再起動する)か. ~/.bashrc、ターミナルで実行してPATH、現在のターミナルセッションの追加を取得できます。

次に、コンパイラにアクセスできることを確認しますarm-linux-gnueabihf-gcc -v。あなたはこのようなものを得るはずです:

Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/tudhalyas/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../libexec/gcc/arm-linux-gnueabihf/4.7.2/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.b
 uild/src/gcc-linaro-4.7-2012.08/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-
 linux-gnu --target=arm-linux-gnueabihf --prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-l
 inux-gnueabihf-raspbian-linux/install --with-sysroot=/cbuild/slaves/oort61/crosstool-ng/builds/
 arm-linux-gnueabihf-raspbian-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fo
 rtran --disable-multilib --with-arch=armv6 --with-tune=arm1176jz-s --with-fpu=vfp --with-float=
 hard --with-pkgversion='crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08' --with-bugurl=
 https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgom
 p --enable-libssp --with-gmp=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-rasp
 bian-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/cbuild/slaves/oort61/crosstool-
 ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-mpc
 =/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-
 gnueabihf/build/static --with-ppl=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf
 -raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/cbuild/slaves/oort61/cros
 stool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --wi
 th-libelf=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/a
 rm-linux-gnueabihf/build/static --with-host-libstdcxx='-L/cbuild/slaves/oort61/crosstool-ng/bui
 lds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --ena
 ble-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-plugin --enable-gol
 d --with-local-prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-li
 nux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08
 )

しかしねえ!私はそれをしました、そして、libsはまだ働きません!

まだ完了していません。これまでのところ、基本的なことしか行っていません。

あなたにはraspberrypi、フォルダ、というフォルダを作りますrootfs

次に/lib/usrディレクトリ全体とディレクトリをこの新しく作成されたフォルダにコピーする必要があります。私は通常、rpiイメージを起動し、rsyncを介してコピーします。

rsync -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr} $HOME/raspberrypi/rootfs

どこ192.168.1.PIあなたのラズベリーパイのIPで置き換えられます。

次に、cmake設定ファイルを作成する必要があります。~/home/raspberrypi/pi.cmakeお好みのエディターで開き、以下を挿入します。

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/raspberrypi/rootfs)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

これで、次のcmakeフラグを追加するだけでプログラムをコンパイルできるようになります-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake

cmake hello worldの例を使用します

git clone https://github.com/jameskbride/cmake-hello-world.git 
cd cmake-hello-world
mkdir build
cd build
cmake -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake ../
make
scp CMakeHelloWorld pi@192.168.1.PI:/home/pi/
ssh pi@192.168.1.PI ./CMakeHelloWorld

4
私はあなたのチュートリアルを一歩一歩追いました、そして今私はエラーなしでコンパイルすることができます。ありがとう!cmakeの例を含めてくれてありがとう。
pqvst 2013年

1
これは単純なプロジェクトではうまく機能しますが、opencvに依存しているCMAKEプロジェクトをクロスコンパイルすることはできません。次のエラーが表示されます "/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../ .. /../../arm-linux-gnueabihf/bin/ld:警告:libjpeg.so.8、/ opt / rpi-rootfs / usr / lib / libopencv_highgui.soで必要、見つかりません(-rpathまたは-rpath-link) "。Cmakeはまた、「-Wl、-rpath、/ opt / rpi-rootfs / usr / lib」フラグをリンカーに
渡しているようです

18
このia32-libsパッケージはUbuntu 13.10では利用できません。libc6-i386 lib32z1 lib32stdc++6代わりに使用しました。
Ben T

2
素晴らしいチュートリアルの答え!賞金を
もらってください

2
徹底的なチュートリアルをありがとう!piマシンから/ lib / usrフォルダーをコピーする必要がある理由を説明していただけますか?
マルチェロ

14

新しいRaspbian Debian BusterイメージとARMv6用のビルド

@Stenygによる回答は、古いRaspbianイメージでのみ機能します。Debian Busterに基づいて最近リリースされたRaspbianでは、更新されたツールチェーンが必要です。

Debian Busterでは、gccコンパイラとglibcがバージョン8.3に更新されました。のツールチェーンgit://github.com/raspberrypi/tools.gitは、まだ古いgcc 6バージョンに基づいています。つまり、を使用git://github.com/raspberrypi/tools.gitすると、多くのコンパイルエラーが発生します。

このチュートリアルは、@ Stenygの回答に基づいています。インターネットの他の多くのソリューションに加えて、このチュートリアルは、ARMv6 CPUに基づく古いRasperry Pi(A、B、B +、ゼロ)もサポートしています。参照: GCC 8クロスコンパイラがARMv6ではなくARMv7実行可能ファイルを出力する

ツールチェーンを設定する

更新されたツールチェーンを含む公式のgitリポジトリはありません(https://github.com/raspberrypi/tools/issues/102を参照)。

GCC8以降に基づいてARMv6用のビルドおよびプリコンパイルされたツールチェーンを含む新しいgithubリポジトリを作成しました。

https://github.com/Pro/raspi-toolchain

プロジェクトのreadmeで述べたように、これらはツールチェーンを取得するための手順です。自分でビルドすることもできます(詳細については、READMEを参照してください)。

  1. ツールチェーンをダウンロードします。
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. それを抽出します。注:ツールチェーンは/opt/cross-pi-gcc場所に依存しないため、中にある必要があります。
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
  1. 完了です!ツールチェーンは現在/opt/cross-pi-gcc

  2. オプションで、次を追加してツールチェーンをパスに追加します。

export PATH=$PATH:/opt/cross-pi-gcc/bin

という名前のファイルの最後に ~/.bashrc

これで、ログアウトして再度ログインする(つまり、ターミナルセッションを再起動する)か. ~/.bashrc、ターミナルで実行してPATH、現在のターミナルセッションの追加を取得できます。

Raspberry PIからライブラリを入手する

いくつかのカスタムライブラリがインストールされている可能性がある独自のRaspberry Pi用にクロスコンパイルするには、これらのライブラリをホストに取得する必要があります。

フォルダを作成します$HOME/raspberrypi。あなたにはraspberrypi、フォルダ、というフォルダを作りますrootfs

次に/lib/usrディレクトリ全体とディレクトリをこの新しく作成されたフォルダにコピーする必要があります。私は通常、rpiイメージを起動し、rsyncを介してコピーします。

rsync -vR --progress -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr,opt/vc/lib} $HOME/raspberrypi/rootfs

どこ192.168.1.PIあなたのラズベリーパイのIPで置き換えられます。

CMakeを使用してプロジェクトをコンパイルする

CMakeに独自のツールチェーンを使用するように指示するには、コンパイラー設定を初期化するツールチェーンファイルが必要です。

こちらからこのツールチェーンファイルを入手してください:https : //github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake

これでcmake、この追加のフラグを追加し-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake、正しい環境変数を設定するだけで、プログラムをコンパイルできるようになります。

export RASPBIAN_ROOTFS=$HOME/raspberry/rootfs
export PATH=/opt/cross-pi-gcc/bin:$PATH
export RASPBERRY_VERSION=1
cmake -DCMAKE_TOOLCHAIN_FILE=$HOME/raspberry/Toolchain-rpi.cmake ..

Hello Worldの例を次に示します。https//github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh


rsync中に「安全でないシンボリックリンクを無視しています」というメッセージが表示されます。大丈夫ですか?
Alexandr Zarubkin

大丈夫です。それは--safe-links議論によるものです
Stefan Profanter

残念ながら、これをraspi 4でテストすることはできませんが、古いRaspiの実行可能ファイルは通常、新しいRaspiでも実行できるため、これも機能するはずです。誰かがそれをテストできたら、説明を更新できてうれしいです
Stefan Profanter

こんにちは、@ StefanProfanterです。ツールチェーンのパスを別のパスに配置するために、ツールチェーンパスを独立させるにはどうすればよいでしょう/opt/cross-pi-gcc か。
nass

@nass残念ながらありません。私はクロスコンパイラの専門家ではありません。誰かがこれについてより多くの洞察と情報を持っている場合、私は私のリポジトリを更新させていただきます!たぶん、新しいStackoverflow質問を作成できます。
Stefan Profanter

5

に追加するまで、コンパイラ(x64バージョン)を使用することができませんでした。sysrootSET(CMAKE_SYSROOT $ENV{HOME}/raspberrypi/rootfs)pi.cmake


CMAKE_SYSROOTを設定せずにHello Worldの例を実行できましたが、共有ライブラリを使用するプロジェクトでpi.cmakeファイルを試行すると、リンカーエラーlibstdc ++。so.6が見つかりませんでした。CMAKE_SYSROOTを設定した後、すべてが問題なく動作しました。
Michael Hilbert

4

Windowsホストの場合、このチュートリアルを強くお勧めします。

  • ツールチェーンをダウンロードしてインストールする
  • sysrootをRPi include / libディレクトリと同期します
  • コードをコンパイルする
  • SmarTTYを使用して、実行可能ファイルをRPiにドラッグアンドドロップします。
  • それを実行します!

それ以上でもそれ以下でもない!

Raspberry、Beaglebone、Cubieboard、AVR(Atmel)などで利用可能なビルド済みのGNUツールチェーン


質問の本文の最初の行以降の編集は、「Ubuntuマシンで動作するRaspberry Piのクロスコンパイルを試みています」でした。タイトルでそれを明確にしました。この回答はまだ歓迎されていますが、次のURLで回答することもできます:raspberrypi.stackexchange.com/questions/27163/…より具体的です。
Ciro Santilli郝海东冠状病六四事件法轮功

4

clangも使用できます。以前はGCCより高速でしたが、現在は非常に安定しています。ソースからclangをビルドする方がはるかに簡単です(ビルドプロセス中に実際にコーヒーを飲むことができます)。

要するに:

  1. clangバイナリを取得(sudo apt-get install clang)するか、ダウンロードしてビルドします(こちらの手順をご覧ください
  2. ラズベリーのrootfsをマウントします(sshfsでマウントされた実際のrootfs、またはイメージの場合があります)。
  3. コードをコンパイルします。

    path/to/clang --target=arm-linux-gnueabihf --sysroot=/some/path/arm-linux-gnueabihf/sysroot my-happy-program.c -fuse-ld=lld

オプションで、レガシーarm-linux-gnueabihf binutilsを使用できます。次に、最後にある「-fuse-ld = lld」フラグを削除できます。

以下は、私のcmakeツールチェーンファイルです。

toolchain.cmake

set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# Custom toolchain-specific definitions for your project
set(PLATFORM_ARM "1")
set(PLATFORM_COMPILE_DEFS "COMPILE_GLES")

# There we go!
# Below, we specify toolchain itself!

set(TARGET_TRIPLE arm-linux-gnueabihf)

# Specify your target rootfs mount point on your compiler host machine
set(TARGET_ROOTFS /Volumes/rootfs-${TARGET_TRIPLE})

# Specify clang paths
set(LLVM_DIR /Users/stepan/projects/shared/toolchains/llvm-7.0.darwin-release-x86_64/install)
set(CLANG ${LLVM_DIR}/bin/clang)
set(CLANGXX ${LLVM_DIR}/bin/clang++)

# Specify compiler (which is clang)
set(CMAKE_C_COMPILER   ${CLANG})
set(CMAKE_CXX_COMPILER ${CLANGXX})

# Specify binutils

set (CMAKE_AR      "${LLVM_DIR}/bin/llvm-ar" CACHE FILEPATH "Archiver")
set (CMAKE_LINKER  "${LLVM_DIR}/bin/llvm-ld" CACHE FILEPATH "Linker")
set (CMAKE_NM      "${LLVM_DIR}/bin/llvm-nm" CACHE FILEPATH "NM")
set (CMAKE_OBJDUMP "${LLVM_DIR}/bin/llvm-objdump" CACHE FILEPATH "Objdump")
set (CMAKE_RANLIB  "${LLVM_DIR}/bin/llvm-ranlib" CACHE FILEPATH "ranlib")

# You may use legacy binutils though.
#set(BINUTILS /usr/local/Cellar/arm-linux-gnueabihf-binutils/2.31.1)
#set (CMAKE_AR      "${BINUTILS}/bin/${TARGET_TRIPLE}-ar" CACHE FILEPATH "Archiver")
#set (CMAKE_LINKER  "${BINUTILS}/bin/${TARGET_TRIPLE}-ld" CACHE FILEPATH "Linker")
#set (CMAKE_NM      "${BINUTILS}/bin/${TARGET_TRIPLE}-nm" CACHE FILEPATH "NM")
#set (CMAKE_OBJDUMP "${BINUTILS}/bin/${TARGET_TRIPLE}-objdump" CACHE FILEPATH "Objdump")
#set (CMAKE_RANLIB  "${BINUTILS}/bin/${TARGET_TRIPLE}-ranlib" CACHE FILEPATH "ranlib")

# Specify sysroot (almost same as rootfs)
set(CMAKE_SYSROOT ${TARGET_ROOTFS})
set(CMAKE_FIND_ROOT_PATH ${TARGET_ROOTFS})

# Specify lookup methods for cmake
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# Sometimes you also need this:
# set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# Specify raspberry triple
set(CROSS_FLAGS "--target=${TARGET_TRIPLE}")

# Specify other raspberry related flags
set(RASP_FLAGS "-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS")

# Gather and distribute flags specified at prev steps.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CROSS_FLAGS} ${RASP_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CROSS_FLAGS} ${RASP_FLAGS}")

# Use clang linker. Why?
# Well, you may install custom arm-linux-gnueabihf binutils,
# but then, you also need to recompile clang, with customized triple;
# otherwise clang will try to use host 'ld' for linking,
# so... use clang linker.
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld)

2

git://github.com/raspberrypi/tools.gitの(かなり古い)ツールチェーンを使用してQT5をコンパイルできませんでした。「アーキテクチャを判別できませんでした」というエラーと、インクルードディレクトリのパスに関する大規模な問題により、構成スクリプトが失敗し続けました。私のために働いたのは、Linaroツールチェーンを使用していた

http://releases.linaro.org/components/toolchain/binaries/4.9-2016.02/arm-linux-gnueabihf/runtime-linaro-gcc4.9-2016.02-arm-linux-gnueabihf.tar.xz

と組み合わせて

https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py

sysrootのシンボリックリンクの修正に失敗すると、ここで説明するように未定義のシンボルエラーが発生します。ラズベリーpiのQtライブラリを構築するときにエラー が発生しました。他のすべてはhttp://wiki.qt.io/RaspberryPi2EGLFSで詳細に説明されています。私の構成設定は:

./configure -opengl es2 -device linux-rpi3-g ++ -device-option CROSS_COMPILE = / usr / local / rasp / gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf / bin / arm-linux-gnueabihf- -sysroot / usr / local / rasp / sysroot -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -prefix / usr / local / qt5pi -hostprefix / usr / local / qt5pi

/ usr / local / rasp / sysrootはローカルのRaspberry Pi 3 Raspbian(Jessie)システムコピーのパスであり、/ usr / local / qt5piはクロスコンパイルされたQTのパスであり、これもデバイスにコピーする必要があります。ツールチェーンを選択するときは、JessieにGCC 4.9.2が付属していることに注意してください。


2

最初の質問はかなり前に投稿されており、その間にDebianはマルチアーチサポートの分野で大きな前進を遂げました。

Multiarchはクロスコンパイルにとって素晴らしい成果です!

簡単に言うと、Raspbian Jessieクロスコンパイルでmultiarchを活用するには、次の手順が必要です。

  • Ubuntuホストで、chrootまたはLXCコンテナー内にDebian Jessie amd64をインストールします。
  • 外部アーキテクチャarmhfを有効にします。
  • emdebianツールリポジトリからクロスコンパイラをインストールします。
  • カスタムgcc仕様ファイルを作成して、クロスコンパイラを微調整します(デフォルトではARMv7-Aのコードが生成されます)。
  • Raspbianリポジトリからarmhfライブラリ(libstdc ++など)をインストールします。
  • ソースコードをビルドします。

これは多くの作業なので、上記の設定を自動化しました。あなたはそれについてここで読むことができます:

Raspbianのクロスコンパイル


1

WindowsとLinuxの両方からクロスコンパイルとデプロイを非常に簡単にするCDP Studio IDEがあり、インストール中にラズベリーツールチェーンのチェックボックスをオンにするだけで済みます。(PS。GPIOおよびI2Cをサポートしているため、これらにアクセスするためのコードは必要ありません)

ラズベリー使用のIDEデモはこちらにあります:https : //youtu.be/4SVZ68sQz5U

ここでIDEをダウンロードできます:https : //cdpstudio.com/home-edition

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.