当前位置: 首页 > news >正文

全志H616交叉编译工具链的安装与使用

交叉编译的概念

1. 什么是交叉编译?

交叉编译是指在一个平台上生成可以在另一个平台上运行的可执行代码。例如,在Ubuntu Linux上编写代码,并编译生成可在Orange Pi Zero2上运行的可执行文件。这个过程是通过使用一个专门的交叉编译工具链来实现的。

编译与交叉编译的区别
  • 编译:在一个平台上生成该平台的可执行代码。
  • 交叉编译:在一个平台上生成另一个平台的可执行代码。

2. 为什么要进行交叉编译?

  • 目标平台的限制:目标平台可能没有足够的资源或不允许安装编译工具。例如,许多嵌入式系统和小型设备不具备直接编译代码的能力。
  • 目标平台尚未建立:在一些情况下,目标平台的操作系统或基础环境尚未完全建立,需要交叉编译来生成基础的启动代码和操作系统核心。

3. 宿主机(host)和目标机(target)

  • 宿主机:用于编辑和编译程序的平台,通常是基于X86架构的PC机。
  • 目标机:用户开发的平台,通常是非X86平台。宿主机上编译的可执行代码将在目标机上运行。

4. 交叉编译工具

工具链和环境设置

使用环境:

  • 电脑:Ubuntu 18.04
  • 开发板:Orange Pi Zero2
  • 交叉编译器aarch64-none-linux-gnu-
下载和安装
  1. 下载交叉编译工具链 下载地址:清华大学开源软件镜像站

    下载文件:

    gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz

  2. 上传并解压到虚拟机

    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

设置环境变量
  1. 临时设置环境变量

    export PATH=$PATH:/home/ygl/orangePiZero2/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

  2. 永久设置环境变量 编辑.bashrc文件:

     
    vi /home/ygl/.bashrc

    在最后一行加入:

    export PATH=$PATH:/home/ygl/orangePiZero2/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

    使其生效:

    source /home/ygl/.bashrc

    测试交叉编译

编写简单的hello.c文件,并使用交叉编译器编译:

 
aarch64-none-linux-gnu-gcc hello.c -o test

将生成的test可执行文件上传到Orange Pi Zero2上测试运行。

带WiringPi库的交叉编译

1. 交叉编译WiringPi库
  1. 交叉编译库文件:首先需要交叉编译WiringPi库,以确保生成的库文件适合目标开发板使用。
  2. 指定头文件和库路径
    aarch64-none-linux-gnu-gcc your_code.c -I ./wiringOP-master/wiringPi -L. -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt -g -o your_executable

2. 文件拷贝和软链接
  1. 拷贝库文件: 从开发板的/usr/local/lib目录下拷贝libwiringPi.so.2.46libwiringPiDev.so.2.46到上位机的/home/ygl/orangePiZero2目录下。
  2. 创建软链接
    ln -s libwiringPi.so.2.46 libwiringPi.so ln -s libwiringPiDev.so.2.46 libwiringPiDev.so

3. 编写交叉编译脚本

编写build.sh脚本,用于交叉编译带WiringPi库的文件:

aarch64-none-linux-gnu-gcc $1 -I ./wiringOP-master/wiringPi -L. -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt -g -o $2
http://www.lryc.cn/news/388526.html

相关文章:

  • 深入解析Java和Go语言中String与byte数组的转换原理
  • 什么是strcmp函数
  • Follow Carl To Grow|【LeetCode】491.递增子序列,46.全排列,47.全排列 II
  • pytorch nn.Embedding 用法和原理
  • Python中常用的有7种值(数据)的类型及type()语句的用法
  • 某配送平台未授权访问和弱口令(附赠nuclei默认密码验证脚本)
  • 01.总览
  • Linux换源
  • 【高考志愿】 化学工程与技术
  • 2024上半年网络与数据安全法规政策、国标、报告合集
  • 基于SpringBoot扶农助农政策管理系统设计和实现(源码+LW+调试文档+讲解等)
  • 淘宝商铺电话怎么获取?使用爬虫工具采集
  • ModStart:开源免费的PHP企业网站开发建设管理系统
  • npm安装依赖报错——npm ERR gyp verb cli的解决方法
  • 公网环境使用Potplayer远程访问家中群晖NAS搭建的WebDAV听歌看电影
  • Forecasting from LiDAR via Future Object Detection
  • 【unity笔记】五、UI面板TextMeshPro 添加中文字体
  • 如何在Windows 11上设置默认麦克风和相机?这里有详细步骤
  • Flutter循序渐进==>数据结构(列表、映射和集合)和错误处理
  • 泛微E9开发 限制明细表列的值重复
  • magicapi导出excel
  • 【秋招突围】2024届秋招笔试-科大讯飞笔试题-03-三语言题解(Java/Cpp/Python)
  • springboot是否可以代替spring
  • 基于SpringBoot的CSGO赛事管理系统
  • 使用 Selenium 实现自动化分页处理与信息提取
  • 现代信息检索笔记(二)——布尔检索
  • 使用Python实现学生管理系统
  • 【嵌入式DIY实例】- LCD ST7735显示DHT11传感器数据
  • 基于Tools体验NLP编程的魅力
  • 强化学习-3深度学习基础