Ubuntu实现树莓派交叉编译
一、交叉编译
在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行所需要的编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行的代码。
>>make: 根据Makefile编译源代码,连接,生成目标文件,可执行文件;
>>make clean: 清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件;
>>make distclean: 类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile;
>>make test / make check: 检查make,确保make没有出错,一般在make install之前执行;
>>make install: 将编译成功的可执行文件安装到指定目录中,一般为/usr/local/bin目录;
>>make dist: 产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE, VERSION);
>>make distcheck: 生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了;
step1. 下载树莓派交叉编译工具https://github.com/raspberrypi/tools
step2. 将源码放到各用户都能share的文件夹下,如/usr/tools
step3. 将交叉编译工具的路径加到环境变量中,为了以后启动不用再设置,我加到了/etc/bash.bashrc中
$gedit /etc/bash.bashrc #在文件的末尾加上: export PATH=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
$source /etc/bash.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 是否能输出正确信息;
如果-v显示“No such file or diectory”, 可能是32位/64位兼容问题,解决办法:
13.10之前版本
//安装32位兼容库
1 apt-get install ia32-libs
13.10之后版本
$ dpkg --add-architecture i386
$ apt-get update
$ sudo apt-get install lib32z1-dev
$ sudo apt-get install libgtk2.-:i386 libpangox-1.0-:i386 libpangoxft-1.0-:i386 libidn11:i386 libasound2:i386 libasound2-plugins:i386 gstreamer0.-pulseaudio:i386 gstreamer0.-plugins-base:i386 gstreamer0.-plugins-good:i386 gstreamer0.-ffmpeg:i386
$ sudo apt-get install ia32-libs
三、编译源代码
1、在写编译脚本时,一定要确保编译器写的是交叉编译的编译器。比如比较常用的Makefile,
demo: $(obj)
$(CXX) -o $@ $^ $(LDFLAGS)
其中的CXX必须是arm-linux-gnueabihf-g++才能编译出正确的在树莓派上的可执行文件。
2、编译第三方库
如果你想设置全局的CC和CXX变量,在每次打开一个新的Terminal时,输入以下命令:
$export CC=arm-linux-gnueabihf-gcc
$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=/usr/local/tools/sqlite3
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=/usr/local/tools/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=/usr/local/tools/openssl
step2: a、修改Makefile CC=arm-linux-gnueabihf-gcc
b、找到有-m64的地方,将-m64删除。
step3: make
step4: make install
Ubuntu实现树莓派交叉编译的更多相关文章
- QT树莓派交叉编译开发环境搭建
QT树莓派交叉编译开发环境搭建 - JerryZone <Cross-compiling Qt Embedded 5.5 for Raspberry Pi 2> <Qt for Em ...
- QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)
前两天入手了一块2.8’的tft液晶显示屏,于是和树莓派连了一发,成功将命令行显示在了这块小的可怜的屏幕上之后,觉得这屏幕就显示个黑白内容太浪费了,于是考虑开发一个”脸”(图形用户界面,GUI).首先 ...
- Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 建设过程
安装SDK 1.Hi3531 SDK包的位置 在"Hi3531_V100R001***/01.software/board"夹,你可以看到一个 Hi3531_SDK_Vx. ...
- Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 搭建过程
安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx ...
- 用Ubuntu和树莓派系统部署kubernetes集群后的一些心得
方案 环境 操作系统:Ubuntu 16.04 & Raspbian GNU/Linux 9(Stretch Desktop) kubernetes :1.15.3 flannel:0.11. ...
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待 前言 将ffmpeg移植到海思H ...
- Ubuntu搭建Android交叉编译环境
一.下载 Android NDK Android NDK官方下载页:http://developer.android.com/tools/sdk/ndk/index.html如果需要旧版本的,比如10 ...
- 树莓派-交叉编译环境搭建(Eclipse)
转自别人的文章(http://www.cnblogs.com/emouse/archive/2013/06/07/3124063.html),一些看不清楚的图片替换了一下. In this blog ...
- 【Linux学习】Ubuntu下嵌入式交叉编译环境arm-linux-gcc搭建
(1)首先选择一个路径用来存放arm-linux-gcc.我选用的是/home/book,并在以下建立一个目录arm-linux-gcc. (2)利用cp EABI-4.3.3_Emdedsky_20 ...
随机推荐
- 开发便于运维的Windows服务
过去几个月,DevOps on Windows网站推出了一系列文章,详细讲解了开发者应怎样创建便于运维的Windows服务.这一系列文章详细分析了如何克服在运维部门看来最困难的部分:Windows服务 ...
- Union-Find 检测无向图有无环路算法
不相交集合数据结构(Disjoint-set data structure)是一种用于跟踪集合被分割成多个不相交的子集合的数据结构,每个集合通过一个代表来标识,代表即集合中的某个成员. Union-F ...
- 《CLR.via.C#第三版》第二部分第8,9章节读书笔记(四)
三种类型的构造方法: 实例构造器(引用类型):实例构造器永远不能被继承(所以方法前没有修饰符):如果类的修饰符为static(sealed和abstract),编译器根本不会在类的定义中生成一个默认构 ...
- 在C#代码中应用Log4Net(二)典型的使用方式
不管用什么框架,学什么东西,最初的想法还不是尽快地用上这个框架,所以我们在这个章节还是不打算介绍具体配置节的应用,而是直接给出一个经典的使用样例,让你尽快上手.即使你对Log4Net的配置不熟悉也完全 ...
- MySQL 对比数据库表结构
200 ? "200px" : this.width)!important;} --> 介绍 本章主要介绍怎样对比数据库的表结构的差异,这里主要介绍使用mysqldiff工具 ...
- EF6 Power Tools的妙用和问题
环境:vs2013+EF:6.1.3.0+Power Tools:Beta 4 power tools:是一个反向工程,在已有数据库的情况下,可以利用它生成Code Frist模式的代码. 问题: 它 ...
- struts1二:基本环境搭建
首先建立一个web项目 引入需要的jar包 建立包com.bjpowernode.struts创建LoginAction package com.bjpowernode.struts; import ...
- Android笔记——eclipse快捷键
查看快捷键定义的地方 Window->Preferences->General->Keys. 编辑相关快捷键 1. [ALT+/] 自动提示方法 此快捷键为用户编辑的好帮手,能为用户 ...
- Clash Detection
Clash Detection eryar@163.com Abstract. Clash detection is used for the model collision check. The p ...
- Mesh Algorithm in OpenCascade
Mesh Algorithm in OpenCascade eryar@163.com Abstract. Rendering a generic surface is a two steps pro ...