ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

树莓派交叉编译

2021-07-29 13:29:56  阅读:149  来源: 互联网

标签:文件 树莓 交叉 text 编译 链接


目录

一、概念 (交叉编译是什么,为什么要交叉编译)  

 交叉编译(Cross_Compile)

   编译       

   为什么要交叉编译?

   宿主机(host)与目标机(target)

   交叉编译需要用到什么工具?

二、交叉编译工具链的安装

      交叉编译工具下载 

      交叉编译工具安装

 三、交叉编译的使用

      对比gcc与armgcc

     如何把编译生成的可执行文件下载到开发板:

四、带WiringPi库的交叉编译如何处理

       用树莓派上的库进行交叉编译

五、软硬链接

  概念  

 生成


一、概念 (交叉编译是什么,为什么要交叉编译)  

 

 交叉编译(Cross_Compile)

     是指编译源代码的平台和执行源代码编译后程序的平台是两个不同的平台。比如,在Intel x86       架构/Linux(Ubuntu)平台下、使用交叉编译工具链生成的可执行文件,在ARM架构/Linux        下运行。 例如:我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树      莓派上面运行,不是在ubuntu linux上面运行。

   编译       

      是在一个平台上生成在该平台上的可执行代码  

   为什么要交叉编译?

     虽然已经有了主机编译,但目的平台上不允许或不能够安装我们所需要的编译器。有时是因为       目的平台上的①资源贫乏,无法运行我们所需要编译器;有时又是因为②目的平台还没有建           立,连操作系统都没有,根本谈不上运行什么编译器。

     树莓派有时因为目的平台还没有建立,也要进行交叉编译。

   宿主机(host)与目标机(target)

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

   交叉编译需要用到什么工具?

      交叉编译器、交叉编译工具链

二、交叉编译工具链的安装

      交叉编译工具下载 

        树莓派软件 ====>>tools-master.zip

       https://pan.baidu.com/s/1BGINcmFowG7zuS4BT8disA 
       提取码:764w

      交叉编译工具安装

     ①将压缩包拷贝进虚拟机linux(直接拖入、共享文件夹、filezilla)

     ②解压 

unzip tools-master.zip

     ③进入解压后的文件夹

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

     ④使用

        以前使用的gcc是在本电脑上运行,使用软链接的是在树莓派上运行。当要使用这个工具时,“藏”得太深,不方便怎么办?作为环境变量即可。

 两种办法   a. 临时有效,配置环境变量  b.永久有效,配置环境变量

   a.  临时有效,配置环境变量 

  • 查看当前路径pwd 

  • 显示当下的环境变量
    echo $PATH
  • 在冒号后面添加复制pwd的路径

    export PATH=$PATH:
    
  • 添加成功后,在其他路径下也能使用交叉编译的gcc,查看版本号

    arm-linux-gnueabihf-gcc -v
    

  b.永久有效,配置环境变量

  1. 进入工作目录(cd . .),打开编辑.bashrc
    vi .bashrc
    

    2.把上面用到的配置环境变量的代码在末尾(shift+g快捷键)加入即可

          3.修改立即生效

source .bashrc

           4.添加成功后,在其他路径下也能使用交叉编译的gcc,查看版本号

 三、交叉编译的使用

      对比gcc与armgcc

        创建text.c文件,使用gcc进行编译为text_1,用file text_1查看文件信息为x86-64可运行

    使用arm-linux-gnueabihf-gcc进行编译为text_2,用file text_2查看文件信息为ARM不可运行

     如何把编译生成的可执行文件下载到开发板:

scp text_2 pi@192.168.1.13:/home/pi

scp指令  text_2文件名  pi开发板用户名 @192.168.1.13 开发板地址:/home/pi 开发板的绝对路径

收到后在树莓派中运行即可。

四、带WiringPi库的交叉编译如何处理

       用树莓派上的库进行交叉编译

           1.登陆树莓派,进入库目录         

cd /usr/lib/

         2.检索关键字“wiringPi”(区分大小写)   

ls -l | grep wiringPi

       3. 把两个文件都用scp传输到VMware

scp libwiringPi.so.2.50 sunshine@192.168.1.8:/home/sunshine
scp libwiringPi.so sunshine@192.168.1.8:/home/sunshine

        4. 将两个文件进行软链接(软硬链接看下文)

ln -s libwiringPi.so.2.50 libwiringPi.so

      5.进行交叉编译,并将生成text_2文件传回树莓派进行编译

arm-linux-gnueabihf-gcc text.c -I /home/sunshine/lessonPi/WiringPi/WiringPi/wiringPi -L. -lwiringPi -o text_2

五、软硬链接

  概念  

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

软链接
又称之为:符号连接(Symbolic Link)。类似于Windows的快捷方式。在选定的位置上生成一个文件的镜像,不会占用磁盘空间,包含有位置信息。软链接可对不存在的文件或目录创建软链接;可交叉文件系统;软链接可对文件或目录创建;删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

硬链接
硬链接就是一个文件的一个或多个文件名。把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。硬链接只能对已存在的文件进行创建,不能交叉文件系统进行硬链接的创建;硬链接不能对目录进行创建,只可对文件创建;删除一个硬链接文件并不影响其他有相同 inode 号的文件。

 生成

  • 软连接

指令 参数 要被链接的文件 软链接文件名字

ln -s libwiringPi.so.2.50 libwiringPi.so
  • 硬链接

指令  要被链接的文件 软链接文件名

ln libwiringPi.so.2.50 libwiringPi.so 

   ln -s 是linux中一个非常重要命令。功能是为某一个文件在另外一个位置建立一个不同的链接。
  用途:当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln      命令链接,不必重复的占用磁盘空间。
 

标签:文件,树莓,交叉,text,编译,链接
来源: https://blog.csdn.net/m0_52467164/article/details/119203032

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有