关于交叉编译的概述

一、交叉编译的简介

交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。例如:在ubuntu linux 上编写树莓派的代码,并编译成可执行代码,在树莓派上运行,而不是在unbuntu linux 上运行。
要分清楚编译与交叉编译的区别,编译是在一个平台上生成在该平台上的可执行代码。

宿主机(host):编辑和编译程序的平台,一般是基于X86的PC机。
目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。

二、交叉编译的原因

1.目的平台上的资源缺乏,如C51,无法运行所需要的编译器。
2.虽然树莓派的资源较多,但是还是需要交叉编译的,因为有时候树莓派目的平台还没有建立,连操作系统都还没有,操作系统也是代码,也要编译。平台的运行至少需要两样东西:(1)bootloader(启动引导代码) (2)操作系统核心

三、树莓派交叉编译工具链的安装

https://github.com/raspberrypi/
(1)从以上网址下载所需的工具链包,即tools-master.zip
将下载后将工具链包拷贝到Unbuntu的工作目录下进行解压

 unzip tools-master.zip

进入到进入到对应的bin目录下如:

 cd /home/xxx/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

pwd 获取路径
echo $PATH 获得当前环境变量的值
(2)环境变量临时有效
export PATH = $PATH: /home/xxx/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
(3)环境变量永久有效
修改工作目录下的隐藏文件.bashrc
vi /home/xxx/.bashrc
在文件的最后一行加入以下代码保存退出:

export PATH = $PATH: /home/xxx/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

加载配置文件,马上生效

source /home/xxx/.bashrc

四、把交叉编译生成的可执行文件下载到目标机

树莓派已经是网络登录,比较快速的方法使用scp指令

scp 文件名 开发板用户名@开发板ip地址:开发板的绝对路径

五、带wiringPi库的交叉编译

1.正常情况,先要交叉编译wiringPi库,编译出的库要适合树莓派,才能使用arm-linux-gnueabihf-gcc 编译工具编译成功,否则会出现如下:
collect2: error: ld returned 1 exit status
需要注意的问题:通过 -I -L 来指定头文件和符合树莓派的库
-I(大写i):指定头文件的路径

-L: 指定库的路径

六、软连接和硬链接

参考文章: https://www.cnblogs.com/zhangna1998517/p/11347364.html
软链接的概述:

  1. 软链接文件有类似于Windows的快捷方式。
  2. 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
  3. 你选定的位置上生成一个文件的镜像,不会占用磁盘空间

软链接的生成:
ln -s 要被链接的文件 软链接的文件名
如:ln -s libwiringPi.so.2.50 libwiringPi.so
生成如下图
在这里插入图片描述
硬链接的概述:
1.它会在你选定的位置上生成一个和源文件大小相同的文件
2.允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能
软链接的生成:
ln 要被链接的文件 软链接的文件名
如:ln libwiringPi.so.2.50 libwiringPi.so

注意,无论是软链接还是硬链接,文件都保持同步变化。

猜你喜欢

转载自blog.csdn.net/qq_46777053/article/details/110221159