我很喜欢用gcc在我的主计算机上编译小的C和C ++小程序。但是,我也有Raspberry Pi,并且作为700 MHz单核计算机,我希望不必每次为它创建二进制文件时都对其进行开发工作。如何(因为我知道有办法)使用x86笔记本电脑为Raspberry Pi交叉编译程序?有没有一种方法可以在Pi上编译C(++)程序但生成x86二进制文件?如果有帮助,请“ SoC是Broadcom BCM2835。它包含带浮点的ARM1176JZFS ...”(根据官方Raspberry Pi常见问题解答)。
我很喜欢用gcc在我的主计算机上编译小的C和C ++小程序。但是,我也有Raspberry Pi,并且作为700 MHz单核计算机,我希望不必每次为它创建二进制文件时都对其进行开发工作。如何(因为我知道有办法)使用x86笔记本电脑为Raspberry Pi交叉编译程序?有没有一种方法可以在Pi上编译C(++)程序但生成x86二进制文件?如果有帮助,请“ SoC是Broadcom BCM2835。它包含带浮点的ARM1176JZFS ...”(根据官方Raspberry Pi常见问题解答)。
Answers:
结合使用apt
存储库和非常出色的Building Embedded Linux Systems(第二版,2008年,O'Reilly),我发现:
arm-linux-gnueabi-gcc
这既是命令的名称,也是您安装以获得该命令的软件包。一旦被调用,它就完全像“香草” gcc
,唯一的例外是它为ARM体系结构(或至少包括BCM2835的子集)构建软件包。 《构建嵌入式Linux系统》(第93-94页)解释说,用于以交叉编译方式调用GNU工具的名称遵循以下格式:
cpu内核制造商
将-gcc
在最上面的例子到底是组件,用于其中的一部分specifing binutils
要使用。可以将其替换为另一个GNU工具链组件,例如ld
(链接器)或as
(汇编器)。对于arm-linux-gnueabi-gcc
,arm
是架构,linux
是内核,gnueabi
是os,并且gcc
是组件。制造商在哪里?显然,可以将制造商指定为“未知”,这是因为制造商很少会有所作为,或者被完全排除在外(包括会有所作为arm-linux-unknown-gnueabi-gcc
)。
正式记录的方法
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
我不确定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
希望对您有所帮助。`
make
编译设置为使用make的项目(“ PROJECT = RPi ARCH = arm PVR = yes make release -j N”,之前的内容只是一个一堆shell变量)。现在,实际上make
使用的是 gcc,但是要使用提供的代码行,我必须获取make的源代码,然后仔细研究其中的大部分内容,以查找将添加到gcc必要参数上的代码的不同部分。不过,谢谢您的尝试!