Ubuntu实现树莓派交叉编译

一、交叉编译

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

要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(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的可执行代码。

二、名词解释

编译第三方源代码时,可以看下工程中的readme和install文件,一般情况下都会写编译步骤。

1、./configure 常用参数  [--build] | [--host] | [--target] | [--prefix] | [--help]

注意:host和--host不是一个意思,host是指宿主机,即编辑和编译程序的平台,是个名词;--host是设置执行文件所运行的主机,是个动词。

>> ./configure: 用来生成对应的 Makefile;

>> --build: 执行代码编译的主机,正常的话就是你的主机系统。若无指定使用host的值;

>> --host: 编译出来的二进制程序所执行的主机, 交叉编译工具链的前缀。因为绝大多数是如果本机编译就本机执行,所以这个值就等于build。但是交叉编译的时候build和host需要设置不同值,用host指定运行主机,即host != build的时候编译才是交叉编译。若无指定将会运行`config.guess‘来检测;

>> --prefix: 安装目录;

>> --help: 查看参数;

>> --target: 这个参数比较特殊,表示需要处理的目标平台名称,主要在程序语言工具如编译器和汇编器上下文中起作用,若无指定使用host的值。一般用来编译工具,比如给arm开发板编译一个可以处理mips程序的gcc,那么--target=mips;

2、举例说明:编译gcc

>> /configure --build=i386-linux --host=arm-linux --target=mipsel-linux --prefix=$(pwd)/_install

用i386-linux的编译器进行gcc的编译,编译出的gcc运行在arm-linux, 编译结果存放到$(pwd)/_install路径下,编译出的gcc用来编译能够在mipsel-linux下运行的代码。

三、交叉编译源代码

1、环境

Ubuntu

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

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

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

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

1 $nano ~/.bashrc
2 #在文件的末尾加上: export PATH=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
3 $source .bashrc

step4. 检测是否安装成功

way1:

$arm #双tab

显示以下内容

way2:

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

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

注意:交叉编译时,如果出现arm-linux-gnueabihf-XXX找不到,确定arm-linux-gnueabihf-XXX -v 是否能输出正确信息,如果能,可以切到root下进行编译

三、编译源代码

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

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

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

2、编译第三方库

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

1 $export CC=arm-linux-gnueabihf-gcc
2 $export CXX=arm-linux-gnueabihf-g++ 

其他的全局变量同上。

以下列几个常用的第三方库交叉编译步骤

1>> sqlite3 http://www.sqlite.org/download.html sqlite-autoconf-3081002.tar.gz

step1:  make clean

step2:  ./configure --host=arm-linux-gnueabihf --prefix=....../XXX

step3:  make

step4:  make install

2>>curl http://curl.haxx.se/download.html  curl-7.43.0.tar.gz

step1:  make clean

step2:  ./configure --host=arm-linux-gnueabihf --prefix=...../curl

step3:  make

step4:  make install

3>> openssl: http://www.openssl.org/source/ openssl-1.0.1p.tar.gz

step1: ./config no-asm shared --prefix=....../openssl

step2:  a、修改Makefile CC=arm-linux-gnueabihf-gcc

   b、找到有-m64的地方,将-m64删除。

step3: make

step4: make install

时间: 2024-10-10 13:08:52

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

ubuntu 14.04 交叉编译ffmpeg

因为工作的关系和自己的兴趣原因,我尝试了自己从ubuntu 14.04 交叉编译ffmpeg. 我交叉编译ffmpeg的方法,完全是摸索得到的.在这之前,我从来没有试过交叉编译. 在从ubuntu成功交叉编译之前,我多次尝试了在MingW.cygwin编译ffmpeg,无一例外全部失败. 这次的成功完全是巧合,因为换个电脑我不确定我会不会还是成功.虽然如此我依然要把这次经理写下来. 首先,我在https://github.com/rdp/ffmpeg-windows-build-helpers获

【Linux学习】Ubuntu下嵌入式交叉编译环境arm-linux-gcc搭建

(1)首先选择一个路径用来存放arm-linux-gcc.我选用的是/home/book,并在下面建立一个文件夹arm-linux-gcc. (2)利用cp EABI-4.3.3_Emdedsky_20100610.tar.bz2 arm-linux-gcc,将压缩包EABI-4.3.3_Emdedsky_20100610.tar.bz2复制到arm-linux-gcc中 (3)解压EABI-4.3.3_Emdedsky_20100610.tar.bz2 记录下文件的存放目录: (4)配置系统环

Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 搭建过程

; font-family:Arial,Console,Verdana,'Courier New'"> ubuntu12.04arm-linux-gcc 安装环境 Linux版本:Ubuntu 12.04    内核版本:Linux 3.5.0   交叉编译器版本:arm-linux-gcc-4.4.3 这个版本的交叉编译器我已经上传到了资源上,可以随便下载,点此下载 安装前的絮叨 首先简单介绍一下,所谓的搭建交叉编译环境,即安装.配置交叉编译工具链.在该环境下编译出嵌入式Linux系统所

ubuntu下编译交叉编译工具链

交叉编译工具链在arm开发中出很重要的位置,开发之前肯定要先有编译器 连接器 汇编器等基础的编译工具.arm体系是一个很复杂的体系,里面的指令有数个版本不同的体系level还有很多自己的特点 ,这就要求编译器也要出几个版本的针对不同的应用. 当然网络上存在很多的编译器的资源,但是作为一个嵌入式开发人员还是要会自己构建出来一个工具链的,做到只能说不想做,不能说做不到,不然真的遇到特殊应用的需要无法作出编译器项目就直接挂了. 整个工具链的编译过程如果采用纯手工的step by step  真的需要几

Linux实现树莓派交叉编译

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

搭建树莓派交叉编译环境

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

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

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

Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 建设过程

安装SDK 1.Hi3531 SDK包的位置 在"Hi3531_V100R001***/01.software/board"夹,你可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz 文件, 文件就是Hi3531的软件开发包. 2.解压缩SDK包 在linuxserver上(或者一台装有linux的PC上.主流的linux发行版本号均能够),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz , 解压缩该文件,能够得到一个Hi3531_SDK_Vx.x.

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

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