web-dev-qa-db-ja.com

Raspberry Pi用のプログラムをgccでクロスコンパイルする方法は?

メインコンピューターでgccを使用して小さな小さなCおよびC++プログラムをコンパイルするのが好きです。ただし、Raspberry Piもあります。700MHzのシングルコアコンピューターであるため、バイナリを作成するたびに開発作業を行う必要はありません。 x86ラップトップを使用して、Raspberry Pi用にプログラムをクロスコンパイルするには(方法があることを知っているため)どうすればよいですか?そして、PiでC(++)プログラムをコンパイルしてもx86バイナリを生成する方法はありますか? 「SoCはBroadcom BCM2835です。これには、浮動小数点を備えたARM1176JZFSが含まれています...」(公式の Raspberry Pi FAQ による)。

8
fouric

aptリポジトリと、非常に優れたBuilding Embedded Linux Systems(第2版、2008年、O'Reilly)をいじくり回すことで、これを見つけました。

arm-linux-gnueabi-gcc

これは、コマンドの名前と、それを取得するためにインストールするパッケージの両方です。呼び出されると、ARMアーキテクチャ(または少なくともBCM2835を含むサブセット)のパッケージをビルドすることを除いて、「Vanilla」gccとまったく同じように動作します。 組み込みLinuxシステムの構築(pg 93-94)は、クロスコンパイル方式でGNUツールを呼び出すために使用される名前が次の形式に従うことを説明しています。

cpu-kernel-manufactuer-os

一番上の例の最後にある-gcccomponentで、binutilsのどの部分を使用するかを指定するために使用されます。 ld(リンカー)やas(アセンブラー)など、別のGNUツールチェーンコンポーネントと交換できます。 arm-linux-gnueabi-gccの場合、armはアーキテクチャ、linuxはカーネル、gnueabiはos、gccはコンポーネントです。メーカーはどこですか?どうやら、製造元はほとんど違いがないため、「不明」と指定することも、一緒に除外することもできます(arm-unknown-linux-gnueabi-gccを作成することも含まれます)。

4
fouric

100%ではわかりませんが、 https://tandrepires.wordpress.com/2012/08/01/raspberry-pi-openelec-pvr-dvb-t/ を使用すると、試すことができます:1)必要なライブラリ:

Sudo apt-get install g++ git nasm flex bison gawk gperf autoconf automake m4 cvs libtool \
byacc texinfo gettext zlib1g-dev libncurses5-dev git-core build-essential xsltproc libexpat1-dev Zip \
autopoint xfonts-utils libxml-parser-Perl libproc-processtable-Perl default-jre

2)次のオプションを使用してプロジェクトをコンパイルします。Nはx86 CPUのコア数です。

$ PROJECT=RPi Arch=arm PVR=yes make release -j N

役に立てば幸いです。 `

0

公式に文書化された方法

https://www.raspberrypi.org/documentation/linux/kernel/building.mdGitHub

git clone https://github.com/raspberrypi/tools
export PATH="$(pwd)/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:${PATH}"
printf '#include <stdio.h>\nint main() { puts("hello world"); }\n' > hello_world.c
printf '#include <iostream>\nint main() { std::cout << "hello world" << std::endl; }\n' > hello_world.cpp
arm-linux-gnueabihf-gcc -std=c99 -o hello_world_c hello_world.c
arm-linux-gnueabihf-g++ -std=c++11 -o hello_world_cpp hello_world.cpp

Ubuntu 17.10でテスト済み、5caa7046982f0539cf5380f94da04b31129ed521のツールリポジトリ