Ubuntu实现树莓派交叉编译
一、交叉编译
在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行所需要的编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行的代码。
>> --host: 编译出来的二进制程序所执行的主机, 交叉编译工具链的前缀。因为绝大多数是如果本机编译就本机执行,所以这个值就等于build。但是交叉编译的时候build和host需要设置不同值,用host指定运行主机,即host != build的时候编译才是交叉编译。若无指定将会运行`config.guess'来检测;
>>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中
1 $gedit /etc/bash.bashrc2 #在文件的末尾加上: export PATH=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin 3 $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之后版本
1 $ dpkg --add-architecture i386 2 $ apt-get update 3 $ sudo apt-get install lib32z1-dev 4 $ sudo apt-get install libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 libasound2:i386 libasound2-plugins:i386 gstreamer0.10-pulseaudio:i386 gstreamer0.10-plugins-base:i386 gstreamer0.10-plugins-good:i386 gstreamer0.10-ffmpeg:i386 5 $ sudo apt-get install ia32-libs
三、编译源代码
1、在写编译脚本时,一定要确保编译器写的是交叉编译的编译器。比如比较常用的Makefile,
1 demo: $(obj) 2 $(CXX) -o $@ $^ $(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=/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
转载于:https://www.cnblogs.com/xieyajie/p/4699724.html
Ubuntu实现树莓派交叉编译相关推荐
- 树莓派交叉编译(PS交叉编译链下载安装、配置永久环境变量、带WiringPi库交叉编译、软链接)
目录 一.本章概述 二.交叉编译工具链的下载安装 下载 安装 交叉编译链临时有效 交叉编译链永久有效 三.交叉编译的使用 对比gcc与armgcc PC端交叉编译发送到树莓派运行 四.带WiringP ...
- 树莓派交叉编译 内核编译 - HQ
树莓派交叉编译 & 内核编译 - HQ 文章目录 树莓派交叉编译 & 内核编译 - HQ @[toc] 注意 树莓派交叉编译 引入 交叉编译工具链的安装 交叉编译使用举例 树莓派源码分 ...
- 在Linux下使用树莓派交叉编译工具编译opencv库并进行移植
一.交叉编译opencv 继上一篇博客:"在Linux下配置opencv"之后,我以为直接将编译命令:g++ `pkg-config --cflags opencv` -o Tes ...
- Ubuntu 安装arm-linux-gcc交叉编译工具
最近要开发嵌入式linux,但是手头上大多文档中介绍交叉编译环境的都是基于RedHat9的,这个版本虽说很经典,但是毕竟实在是太古老了,自己机器上本身装的是Ubuntu,因此小小的研究了一下,在ubu ...
- PC(Ubuntu)和树莓派实现无秘ssh
PC(Ubuntu)和树莓派实现网线无秘ssh 为了调试的方便,我在主机(Ubuntu)和树莓派实现ssh登录无需每次输入密码和无需每次输入IP ssh配置文件 在ssh的配置文件里修改,实现快捷登录 ...
- ubuntu 14.04 交叉编译ffmpeg
因为工作的关系和自己的兴趣原因,我尝试了自己从ubuntu 14.04 交叉编译ffmpeg. 我交叉编译ffmpeg的方法,完全是摸索得到的.在这之前,我从来没有试过交叉编译. 在从ubuntu成功 ...
- Ubuntu 环境下交叉编译运行正点原子的程序
Ubuntu 环境下交叉编译运行正点原子的程序 在校学生,求职过程中对方要求在Ubuntu环境下交叉编译stm32的程序,我觉得很有意思,因为之前就听说过可以在Linux环境下运行stm32的程序,因 ...
- 树莓派交叉编译opencv3.4.1/pycharm安装opencv/实现人脸识别Demo记录
目录 文章目录 目录 前言 树莓派交叉编译opencv3.4.1 安装环境 开始交叉编译 错误记录 WIN10+Anaconda+PyCharm安装opencv3.4.7 WIN10下opencv人脸 ...
- 树莓派 交叉编译工具链的安装
1.交叉编译是什么: 2.为什么要交叉编译? 3.交叉编译需要用到什么工具? 4..交叉编译工具链的安装 4.1临时有效 4.2永久有效 安装流程: 1.用file Zilla将tools-maste ...
最新文章
- 有没有将深度学习融入机器人领域的尝试?有哪些难点?
- 龙邱树莓派Raspberry Pi 扩展板电路及其相关实验
- (数论)51NOD 1135 原根
- c语言变量作用域生命周期,C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期...
- 聊聊 HTTP 常见的请求方式
- jzoj3318-[BOI2013]Brunhilda的生日【数论】
- vaadin_5分钟内Google App Engine上的Vaadin App
- MATLAB提取矩阵中的一部分
- length函数的头文件_Framebuffer 应用编程中涉及的 API 函数
- 在命令行上启用 64 位 Visual C++ 工具集
- 查询长期未登录AD的用户
- 【elasticsearch】elasticsearch 7 index.lifecycle.rollover_alias does not point to index
- (转)正则表达式在ORACLE中的使用
- 伽玛校正(Gamma Correction)
- ArcGIS中令栅格数据研究区中水体的DN值为零
- You are what you read 笔记
- 不外昨夜下战书当店的裘姓值班司理则称
- go 错误处理与测试
- SQLite 对时间的支持
- android优化最强软件,七款安卓手机优化软件推荐 为手机提速
热门文章
- uvm 形式验证_uvm面试题
- python size和count_python中size和count的区别
- Apache Tika:通用的内容分析工具
- mapreduce简单的gzip压缩
- 玩转GIT系列之【git submodule update出错提示子模组未对路径注册】
- 玩转mini2440开发板之【编译u-boot提示没有规则可以创建“XX.o”需要的目标】
- [机器学习] 分类 --- Support Vector Machine (SVM)
- 机器学习 可视化_机器学习-可视化
- libusb:libusb_bulk_transfer的timeout参数问题
- python调用C语言函数(方法)的几种方法