如何使用gcc交叉编译Raspberry Pi的程序?


8

我很喜欢用gcc在我的主计算机上编译小的C和C ++小程序。但是,我也有Raspberry Pi,并且作为700 MHz单核计算机,我希望不必每次为它创建二进制文件时都对其进行开发工作。如何(因为我知道有办法)使用x86笔记本电脑为Raspberry Pi交叉编译程序?有没有一种方法可以在Pi上编译C(++)程序但生成x86二进制文件?如果有帮助,请“ SoC是Broadcom BCM2835。它包含带浮点的ARM1176JZFS ...”(根据官方Raspberry Pi常见问题解答)。


还有树莓PI SE,这里是一个可以让你在正确的轨道上了一个问题:raspberrypi.stackexchange.com/questions/192/...
Lekensteyn

Answers:


4

结合使用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-gccarm是架构,linux是内核,gnueabi是os,并且gcc是组件。制造商在哪里?显然,可以将制造商指定为“未知”,这是因为制造商很少会有所作为,或者被完全排除在外(包括会有所作为arm-linux-unknown-gnueabi-gcc)。


1

正式记录的方法

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


0

我不确定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必要参数上的代码的不同部分。不过,谢谢您的尝试!
Fouric 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.