我喜欢使用 gcc 在主计算机上编译小型 C 和 C++ 程序。但是,我也有一台 Raspberry Pi,它是一台 700 MHz 单核计算机,我不希望每次想要为它创建二进制文件时都要在它上面进行开发工作。如何使用 x86 笔记本电脑交叉编译 Raspberry Pi 程序(我知道有办法)?有没有办法可以在 Pi 上编译 C(++) 程序但生成 x86 二进制文件?如果有帮助,“SoC 是 Broadcom BCM2835。它包含一个 ARM1176JZFS,带有浮点……”(根据官方Raspberry Pi 常见问题解答)。
答案1
通过在存储库中四处搜索apt
和极其优秀的构建嵌入式 Linux 系统(第二版,2008 年,O'Reilly),我发现了这一点:
arm-linux-gnueabi-gcc
这既是命令的名称,也是您安装以获取该命令的软件包的名称。一旦调用,它的作用与“vanilla”完全相同gcc
,唯一的例外是它为 ARM 体系结构(或至少包括 BCM2835 的子集)构建软件包。 构建嵌入式 Linux 系统(第 93-94 页)解释说,以交叉编译方式调用 GNU 工具所使用的名称遵循以下格式:
CPU 内核制造商操作系统
-gcc
最上面例子的末尾是成分,用于指定binutils
您要使用的哪个部分。它可以换成另一个 GNU 工具链组件,例如ld
(链接器)或as
(汇编器)。对于arm-linux-gnueabi-gcc
,arm
是架构,linux
是内核,gnueabi
是操作系统,gcc
是组件。制造商在哪里?显然,制造商可以指定为“未知”,因为它很少会产生影响,或者完全省略(包括它会产生arm-linux-unknown-gnueabi-gcc
)。
答案2
官方记录的方法
https://www.raspberrypi.org/documentation/linux/kernel/building.md(GitHub)
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
答案3
我不确定 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
我希望它能有所帮助。'