Linux实现树莓派交叉编译

一、交叉编译

在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行所需要的编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。

要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行的代码。

常见的交叉编译例子如下:

1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。

2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。

3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。

二、交叉编译源代码

1、环境

Kali-Linux

2、树莓派交叉编译工具安装

step1. 下载树莓派交叉编译工具https://github.com/raspberrypi/tools

step2. 将源码放到各用户都能share的文件夹下,如/usr/tools

在该文件夹下,一共有5个不同版本的交叉编译工具

arm-bcm2708hardfp-linux-gnueabi
gcc-linaro-arm-linux-gnueabihf-raspbian
arm-bcm2708-linux-gnueabi
gcc-linaro-arm-linux-gnueabihf-raspbian-x64
arm-rpi-4.9.3-linux-gnueabihf

其中arm-rpi-4.9.3-linux-gnueabihf和gcc-linaro-arm-linux-gnueabihf-raspbian-x64是64位机器用的,每一个交叉编译工具的目录下都有bin目录进入,执行./arm-linux-gnueabihf-gcc -v可查看gcc版本。

在这里我们使用的是 gcc-linaro-arm-linux-gnueabihf-raspbian-x64 版本!

step3. 将交叉编译工具的路径加到环境变量中,为了以后启动不用再设置,我加到了/etc/bash.bashrc中

gedit /etc/bash.bashrc或者#/etc/profile全局的,随系统启动设置【设置这个文件是一劳永逸的办法】#gedit /etc/profile
64位添加:#树莓派交叉编译环境:start
export PATH=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
export PATH=$PATH:/usr/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin
#树莓派交叉编译环境:start
32位添加:#树莓派交叉编译环境:start
export PATH=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin(gcc有问题,暂不明)
export PATH=$PATH:/usr/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin(使用这个文件中的gcc)
#树莓派交叉编译环境:start

重新加载

source /etc/bash.bashrc

step4. 检测是否安装成功

way1:

arm #双tab

显示以下内容

way2:

arm-linux-gnueabihf-gcc -v
#能显示正确信息

arm-linux-gnueabihf-g++ -v
#能显示正确信息

三、编译源代码

1、在写编译脚本时,一定要确保编译器写的是交叉编译的编译器。比如比较常用的Makefile,

demo: $(obj)
    $(CXX) -o [email protected] $^ $(LDFLAGS)

其中的CXX必须是arm-linux-gnueabihf-g++才能编译出正确的在树莓派上的可执行文件。

2、编译第三方库

如果你想设置全局的CC和CXX变量,在每次打开一个新的Terminal时,输入以下命令:

export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++ 

其他的全局变量同上。

四、简单例子测试

编写一个测试文件,在PC机上完成编译然后上传到树莓派中并执行。该例子仅测试交叉编译是否成功并简单测试了浮点数功能 
新建一个文件夹hello,里面有两个文件hello.c 和 Makefile。

hello.c

#include <stdio.h>
int main(void)
{
    float pi = 3.14;
    printf("Hello World\n");
    printf("%.2f\n",2*pi);
} 

Makefile

CC=arm-linux-gnueabihf-gcc
hello:hello.o
clean:
    rm -rf hello.o hello

在makefile文件中使用了至少两条隐含规则,CC为默认工具链;.o文件由同名的.c文件生成。

在该文件夹下,进行make一下

make

把产生的可执行文件hello上传到树莓派,执行hello可执行文件,可以得到正确结果,说明交叉编译链配置成功

ls
chmod 777 hello    #赋予可执行权限
./hello

参考:https://blog.csdn.net/caomang23/article/details/82658982

https://blog.csdn.net/u010833052/article/details/78481973

https://blog.csdn.net/iefenghao/article/details/88815093

https://blog.csdn.net/qq_16397695/article/details/83063826

https://shumeipai.nxez.com/2013/10/08/configure-cross-compiler-platform-raspberry-pi.html

原文地址:https://www.cnblogs.com/little-kwy/p/12303983.html

时间: 2024-11-10 06:49:00

Linux实现树莓派交叉编译的相关文章

搭建树莓派交叉编译环境

本学期选了嵌入式开发课程,所以第一步就是要准备环境.硬件环境自不必说,购买了树莓派二代.sd卡,读卡器.路由器.网线这些都是以前就有的.软件环境的搭建包括如下几步: 1.搭建虚拟机Linux环境2.烧录树莓派系统3.在虚拟机linux环境中搭建本地开发与编译环境4.在虚拟机linux上搭建交叉编译环境5.开发一段简单的程序,通过本地编译后,再进行交叉编译.之后将编译好的程序放到树莓派上执行进行测试. 具体步骤: 1.搭建虚拟机linux理论上说,在windows环境下如果也能找到满足要求的交叉编

Ubuntu实现树莓派交叉编译

一.交叉编译 在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征:有时是因为目的平台上的资源贫乏,无法运行所需要的编译器:有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器. 要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译源代码,最终生成可在

linux cross toolsChain 交叉编译 ARM(转)

转载请注明出处:http://blog.csdn.net/mybelief321/article/details/9076583 安装环境 Linux版本:Ubuntu 12.04    内核版本:Linux 3.5.0   交叉编译器版本:arm-linux-gcc-4.4.3 这个版本的交叉编译器我已经上传到了资源上,可以随便下载,点此下载 安装前的絮叨 首先简单介绍一下,所谓的搭建交叉编译环境,即安装.配置交叉编译工具链.在该环境下编译出嵌入式Linux系统所需的操作系统.应用程序等,然后

LINUX主机上交叉编译树莓派详细教程

LINUX主机OS:Ubuntu14.04 64位,运行在wmware workstation 10上. 树莓派版本:raspberry pi 2 B型. 树莓派OS:官网下的的raspbian-jessie. 1.为什么需要交叉编译 在Ubuntu上直接编译一个.c源文件可以用系统自带的gcc编译器编译test.c gcc test.c -o test 然后执行生成的二进制文件 ./test 交叉编译就是把编译的过程在LINUX PC(或其它主机)上执行,然后拷贝二进制可执行文件到树莓派(或其

QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)

前两天入手了一块2.8’的tft液晶显示屏,于是和树莓派连了一发,成功将命令行显示在了这块小的可怜的屏幕上之后,觉得这屏幕就显示个黑白内容太浪费了,于是考虑开发一个”脸”(图形用户界面,GUI).首先考虑用C语言或者Python来堆图形界面,但是发现不管是C语言的图形库SDL亦或者OpenGL来堆这货都有点麻烦,毕竟我也不是想显示个太过于复杂的图形界面在那块屏幕上,只是显示一个最基本的文字数字就满足了.于是考虑到QT库.之前曾经学过一段时间的QT For Win32,那个环境很好搭建,从http

golang 2行代码在基于arm linux的树莓派、orangepi上运行http web服务

go语言(golang)简化了跨平台交叉编译步骤,支持在windows系统下交叉编译基于arm+linux平台的应用,运行时无需其它依赖库.以下以一个简单的http server为例,先上源码: ************************************************************ package main import( "net/http" ) funcmain(){ http.Handle("/",http.FileServe

树莓派 交叉编译环境搭建(Win 7)

虽然树莓派带有gcc,可以编译C/C++程序,但是如果工程比较庞大,使用树莓派进行编译会浪费大量的时间,我们可以在PC上编译好程序,然后将可执行文件传递到树莓派上,执行程序,这样充分利用了PC上的资源,加快了开发进度. 首先需要在PC上搭建交叉编译环境,这里我选择了Cygwin作为交叉编译环境,在官网上即可下载. 安装程序Cygwin 下载arm-tool chain 下载地址:https://github.com/IanLinsdell/Raspberrypi 下载完成后解压其中的hardfp

Linux configure关于交叉编译的参数设置【转】

转自:http://blog.csdn.net/darennet/article/details/9003005 configure的参数众多,一般包括如下 --srcdir=DIR 这个选项对安装没有作用.他会告诉'configure'源码的位置.一般来说不用指定此选项,因为'configure'脚本一般和源码文件在同一个目录下. --program-prefix=PREFIX 指定将被加到所安装程序的名字上的前缀.例如,使用'--program-prefix=g'来configure一个名为

树莓派-交叉编译环境搭建(Eclipse)

转自别人的文章(http://www.cnblogs.com/emouse/archive/2013/06/07/3124063.html),一些看不清楚的图片替换了一下. In this blog  entry the setup of  a cross-compiling development environment for the Raspberry Pi will be demonstrated. This will include the Official Raspbian (arm