交叉编译的概念
交叉编译是一个平台生成另外一个平台的可执行代码,同一体系结构可以运行不同的操纵系统,同时不同的操作系统也可以在不同的体系中运行。
例如我们在Ubuntu Linux上编写orangepiZero2 的代码编译为a.out是在orangepiZero2上运行并不是在Ubuntu Linux上运行
那什么是编译呢?
编译是一个平台上生成该平台上可执行的代码。
2.为什么要交叉编译
平台上不允许或不能够安装编译工具 比如C51
orangepiZero2可以安装编译器为什么还要交叉编译
因为有时候目标平台没有建立,连操作系统都没有,更不用说编译器了。操作系统也是代码也要编译。
平台运行至少需要两样东西:bootloader(启动引导代码)以及操作系统核心。这些东西都要编译。
3.宿主机(host)和目标机(target)
宿主机:编辑和编译程序的平台,一般是基于X86的PC机通常也被称之为主机。
目标机:用户开发的平台非X86平台,宿主机编译的可执行代码在目标机上运行。
4.交叉编译的工具
交叉编译器和交叉编译工具链。
使用环境
电脑:Ubuntu 18.04
开发板:orangepi-zero2
交叉编译器:aarch64-none-linux-gnu-
2.下载工具到Windows上并上传到Ubuntu虚拟机

地址:索引 /armbian-releases/_toolchain/ |清华大学开源软件镜像站 |清华开源镜像 (tsinghua.edu.cn)
gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz即为全志Orange Pi Zero 2 所用的应用程序的交叉编译工具链
将下载好的文件上传到虚拟机桌面
3.解压
cp /home/ygl/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz /home/orangpiZero2
tar -xf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz
cd gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

aarch64-none-linux-gnu-gcc即为全志交叉的交叉编译工具
4.设置环境变量临时有效
输出环境变量 echo $PATH
输出结果为:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
pwd显示当前路径
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ygl/orangePiZero2/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin
5.设置永久有效
修改工作目录的 .bashrc 是一个隐藏文件,用来配置命令终端
vi /home/ygl/.bashrc
在最后一行加入
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ygl/orangePiZero2/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin
保存并推出
source /home/ygl/.bashrc 使其生效
6.测试
在虚拟机编写hello.c并用交叉编译工具编译为 test可执行文件


把test上传到orangepiZer2上


5.带wiringpi库的交叉编译
1.带wiringpi库的交叉编译如何进行
(1)正常我们要先交叉编译wiringpi库,编译出的库适合开发板,这时交叉编译可执行程序的时候,链接库的格式也是正确的。
(2)通过 -I 指定头文件-L指定库
2.将库所需的文件拷贝到上位机
进入开发板/usr/local/lib目录下拷贝libwiringPi.so.2.46到上位机的/home/ygl/orangePiZero2目录下
进入开发板/usr/local/lib目录下拷贝libwiringPiDev.so.2.46到上位机的/home/ygl/orangePiZero2目录下
3.创建软链接
软链接相当于一个快捷方式,实际上是一个文本文件存放的是另外一个文件的位置信息。软链接就是在你选定的位置上生成一个镜像,不占用磁盘空间。
ln -s 源文件 目标文件
ln -s libwiringPi.so.2.46 libwiringPi.so
ln -s libwiringPiDev.so.2.46 libwiringPiDev.so

硬链接:
硬链接会在你选定的位置上生成一个和源文件相同大小的文件
ln 源文件 目标文件
4.将wiringpi上传到上位机
将orangepiZero2上的wiringpi-master.zip上传到上位机并解压
5. 编写脚本
编写build.sh脚本 交叉编译带wiringPi库的文件:
aarch64-none-linux-gnu-gcc $1 -I ./wiringOP-master/wiringPi -L. -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt -g -o $2
给予其执行权限:chmod +x build.sh文章来源:https://www.toymoban.com/news/detail-547943.html
这样就可以交叉编译orangepiZero2平台上的代码文件了文章来源地址https://www.toymoban.com/news/detail-547943.html
到了这里,关于全志H616交叉编译工具链的安装与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!