ubuntu串口重命名助手arm64架构(下)Qt交叉编译arm64

news2024/11/26 23:26:45

✨✨ Rqtz 个人主页 : 点击✨✨

🎈PyQt系列专栏:点击🎈

🎈Qt智能车上位机专栏: 点击🎈

🎈Qt串口助手专栏:点击🎈

💫宗旨:共享IT之美,共创机器未来

目录

前言

设备介绍

查询系统架构

下载交叉编译器

​编辑

将交叉编译器写入环境变量

配置Qt的arm64编译环境

配置前的相关工作重要

Qt源码下载地址  点击

将本地的arm64交叉编译器配置到Qt中

将程序拷贝到开发板

成功图片


前言

        本来编写这个小软件是在电脑PC端上运行的,但是由于最近比赛需要使用板子,我这里使用的是jeston nano B01 ,由于板子架构方式和电脑PC架构方式不一样,一个是aarch64,一个是x86_64,软件是在pc端编写的,交媾为x86_64,所以无法在arm64架构的板子上运行.软件是基于Qt框架编写的,一次可以使用交叉编译的方式,将软件一直到嵌入式平台arm64运行.如图

设备介绍

PC端/电脑 :linux系统/ubuntu 20.04 (只是图标换成18.04的了)

操作系统类型/架构:64位/x86_64

品牌:联想拯救者Y7000P

GPU:NVIDIA 4060

CPU:13th Gen Intel® Core™ i7-13620H × 16

板子/小电脑:jeston nano B01

操作系统类型/架构:64位/aarch64

Qt 版本:5.12.8

Qt creater 版本:4.9.2

交叉编译器gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu

查询系统架构

命令

uname -a

PC

jeston nano b01/开发板

jeston nano b01图片

下载交叉编译器

访问官网Downloads | GNU-A Downloads – Arm Developer

  • 选择下方后点击

  • 找到红色框选的下载

下载完成后

  • 解压缩
    tar -xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
    
  • 重命名
    mv  gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu aarch64-linux-gnu-8.3.0 
    
  • 将该目录复制到opt
sudo cp -rf aarch64-linux-gnu-8.3.0/ /opt 

将交叉编译器写入环境变量

  1. 在主目录中使用快捷键crtl+H,找到./bashrc
  2. 双击打开,添加如下代码
    export PATH=$PATH:/opt/aarch64-linux-gnu-8.3.0/bin
  3. 保存后更新环境
    source ~/.bashrc
    
  4. 终端输入验证,按tab可以出现即可
  5. 使用which查看位置
    which aarch64-linux-gnu-gcc-8.3.0 
    

配置Qt的arm64编译环境

配置前的相关工作重要

安装编译需要的所有组件

sudo apt install build-essential libgl1-mesa-dev gperf libclang-dev -y

安装python环境

sudo apt install python -y
sudo apt install python-dev -y
sudo apt install python-pip -y

Qt源码下载地址  点击

  1. 解压
    tar -xvf qt-everywhere-src-5.12.8.tar.xz
    
  2. 在主目录构建一个文件夹

    mkdir -p aarch64

    将解压后的包放到该目录

  3. 配置qmake,请按照

    /home/xxx/aarch64/qt-everywhere-src-5.12.8/qtbase/mkspecs/linux-aarch64-gnu-g++  xxx为你的主机名,打开qmake.conf

  4. 编辑qmake.conf,双击打开,主要是更换路径,更换你的交叉编译器路径,刚才复制到了opt

  5. 在aarch64目录下再创建两个文件夹,分别用于存储arm64的相关库和编译

  6. 执行configure,在arm_bulid中打开终端,执行

    ./configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /home/rqtz/aarch64/arm64 -nomake examples -no-opengl -silent -qpa linuxfb

  7. 注意两个地方

    1. -xplatform 参数后面跟的是按照下面路径打开后框选中的名字,即编译器

    2.  -prefix 参数后面根的是你的最终安装路径

    其他参数

    1. 基本安装选项

      • -bindir:可执行文件目录[PREFIX/bin]。
      • -libdir:库文件目录 [PREFIX/lib]。
      • -headerdir:头文件目录[PREFIX/include]。
      • -datadir:Arch独立的数据目录[PREFIX]。
      • -plugindir:插件目录[ARCHDATADIR/plugins]。
      • -importdir:QML1 imports模块目录[ARCHDATADIR/imports]。
      • -qmldir:QML2 imports模块目录[ARCHDATADIR/qml]。
    2. 构建选项

      • -opensource:构建Qt的开源版本。
      • -commercial:构建Qt的商业版本。
      • -confirm-license:自动确认许可证。
      • -release:构建Qt的发布版本。
      • -debug:构建Qt的调试版本。
      • -debug-and-release:构建Qt的调试和发布两个版本。
      • -shared:建立共享的Qt库。
      • -static:构建静态Qt库。
    3. 特性支持

      • -feature-:启用。
      • -no-feature-:禁用。
      • -list-features:列出可用功能特性。
      • -list-libraries:列出可能的外部依赖项。
    4. 第三方库

      • -system-:使用系统安装的第三方库。
      • -qt-:使用Qt自带的第三方库。
    5. 高级选项

      • -platform :选择主机mkspec。
      • -xplatform :交叉编译时选择目标mkspec。
      • -device :交叉编译设备。
      • -device-option <key=value>:为设备mkspec添加选项。
      • -appstore-compliant:禁用平台应用商店中不允许使用的代码。
  8. 输入o 回车

    输入y回车

  9. 编译安装,根据电脑性能编译时间长久之分

    make -j6

    执行成功后

    sudo make install

    最终 arm64目录生成如下,其中lib目录中即为aarch64的动态库,需要弄到板子上使用。

  10. 查看库的架构方式,为aarch64才正常

    readelf -h libQt5Core.so

将本地的arm64交叉编译器配置到Qt中

1):打开Qt creater 上方菜单栏 工具-->选项-->编译器

2)如图所示添加GCC的C++,完成之后点击apply

3)如图所示添加GCC的C,完成之后点击apply

4)配置Qt version

上图的qmake路径为之前编译是创建的arm64目录中的bin下,注意不能有报错,佛欧则无法使用。

5)配置编译套件

6)选择需要到板子上使用的程序编译,注意选择release模式编译,并选择刚刚配置的aarch64编译器,点击锤子编译,不要点击绿色三角,因为平台不一样。

7)编译成功后就会生成一个可执行程序,将该目录的所有文件压缩后发送到开发板使用。

使用file命令和readelf查看是否为aarch64架构

将程序拷贝到开发板

        在小电脑上将文件夹解压,打开终端使用./的方式执行。

  • 问题1:执行时发现终端提示找不到libQtcore.so.5的动态链接库。这个时候我们就需要用到上面我们在编译时创建的arm64的目录了。

打开arm64-->lib,找到libQtcore.so.5将其拷贝到小电脑/开发板上即可。以后提示缺少什么库我们从这里面直接拷贝即可。

在开发板上使用

sudo cp libQt5Core.so.5 /usr/lib

即可。

  • 问题2:由于该程序使用了串口,执行时终端提示
    relocation error: /usr/lib/libQt5SerialPort.so.5: symbol _ZN16QIODevicePrivate4skipEx version Qt_5_PRIVATE_API not defined in file libQt5Core.so.5 with link time reference

解决:终端执行

sudo apt-get install libqt5serialport5-dev libudev-dev

成功图片

我是将其移植到了linux的桌面环境,这样启动程序更加方便。具体做法请看[ linux添加应用图标到桌面 ] : 中将应用程序添加图标(快捷方式 ),并放置任务栏中,.desktop文件使用_linux 任务栏图标-CSDN博客

如有错误,请大佬指正批评!

参考Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程_qt交叉编译arm-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1952366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JVM基础05】——组成-能不能解释一下方法区?

目录 1- 引言&#xff1a;方法区概述1-1 方法区是什么&#xff1f;(What)1-2 为什么用方法区&#xff1f;方法区的作用 (Why) 2- ⭐核心&#xff1a;详解方法区(How)2-1 能不能解释一下方法区&#xff1f;2-2 元空间内存溢出问题2-3 什么是常量池&#xff1f;2-4 运行时常量池 …

Stable Diffusion WebUI本地环境搭建

一、项目代码下载 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui 二、环境配置 conda create --n stafu python3.10.6 实际上跟自己创建的环境没有关系&#xff0c;项目启动会自动复制这个环境&#xff0c;之后项目根据这个基础环境构建 也可以在自己…

【五】MySql8基于m2芯片arm架构Ubuntu24虚拟机安装

文章目录 1. 更新系统包列表2. 安装 MySQL APT Repository3. 更新系统包列表4. 安装 MySQL Server5. 运行安全安装脚本6. 验证 MySQL 安装7. 配置远程连接7.1 首先要确认 MySQL 配置允许远程连接&#xff1a;7.2 重启 MySQL 服务&#xff1a;7.3 检查 MySQL 用户权限&#xff1…

TensorRT推理时间不稳定的解决方案

目录 解决方案 第一步 第二步 效果 解除锁频方法 解决方案 锁定GPU时钟频率&#xff08;实测有效&#xff09; 第一步 使用 nvidia-smi -q -d SUPPORTED_CLOCKS 查询GPU支持的最高频率&#xff0c;如下图所示为 8001 MHz 第二步 cmd&#xff08;管理员权限&#xff09…

0719_驱动2 编写编译linux内核模块

一、编写linux内核模块 linux内核模块三要素&#xff1a; 入口&#xff1a;执行insmod 安装命令操作 出口&#xff1a; 执行rmmod 卸载命令操作 许可证&#xff1a;遵循GPL协议&#xff0c;开源&#xff0c;指定入口地址&#xff0c;出口地址 #include <linux/init.h> #i…

JAVA同城圈子达人交友系统源码支持微信小程序+公众号+H5+APP

&#x1f308; 同城圈子达人交友系统&#xff0c;遇见志同道合的TA&#xff01; &#x1f389; 开篇&#xff1a;告别孤单&#xff0c;同城圈子等你来探索&#xff01; 在这个快节奏的城市生活中&#xff0c;你是否常常感到孤独&#xff0c;渴望找到一群志同道合的朋友&#…

SQL labs-SQL注入(三,sqlmap使用)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言&#xff1a; 盲注简述&#xff1a;是在没有回显得情况下采用的注入方式&#xff0c;分为布尔盲注和时间盲注。 布尔盲注&#xff1a;布尔仅有两种形式&#xff0c;ture&#…

Django学习(二)

get请求 练习&#xff1a; views.py def test_method(request):if request.method GET:print(request.GET)# 如果链接中没有参数a会报错print(request.GET[a])# 使用这个方法&#xff0c;当查询不到参数时&#xff0c;不会报错而是返回你设置的值print(request.GET.get(c,n…

深入解析Flowable:工作流与业务流程管理引擎

深入解析Flowable&#xff1a;工作流与业务流程管理引擎 引言 在数字化时代&#xff0c;企业对流程自动化的需求日益增长。有效的工作流和业务流程管理系统可以帮助组织提高生产力、优化资源分配以及增强决策支持。Flowable是一款开源的工作流和业务流程管理&#xff08;BPM&a…

Hadoop单机版环境搭建

一 . 案例信息 Hadoop 的安装部署的模式一共有三种&#xff1a; 本地模式&#xff0c;默认的模式&#xff0c;无需运行任何守护进程&#xff08; daemon &#xff09;&#xff0c;所有程序都在单个 JVM 上执行。由 于在本机模式下测试和调试 MapReduce 程序较为方便&#x…

Ghost Buster Pro for Mac:系统优化的得力助手

Ghost Buster Pro for Mac是一款功能强大的系统优化工具&#xff0c;专为Mac用户设计&#xff0c;旨在提供全方位的系统清理、优化和维护服务。 这款软件拥有出色的垃圾清理能力&#xff0c;能够深度扫描并清除Mac上的无效目录、文件、系统日志、下载历史记录、缓存和临时文件…

WARNING: Ignoring invalid distribution -ip警告信息如何去掉?

查看已安装依赖列表的时候&#xff0c;出现了很多警告信息&#xff0c;如何去掉呢&#xff1f; 解决办法 打开这个路径&#xff1a;d:\software\python\python39\lib\site-packages 这种波浪线开头的&#xff0c;我们将它删除掉,就可以了。

使用 leanback 库 GridView 管理AnroidTV的焦点

一、前情提要 我当前需要开发一个TV应用&#xff0c;但是之前处理过的焦点问题的很少&#xff0c;现在空下来了&#xff0c;对过往的工作做一个总结分享。在手机APP开发中常用的 RecycleView 在 TV 中开发时&#xff0c;无法解决大量的焦点问题&#xff0c;所以使用leanback进…

OSPF LSA 格式及字段详解

在 AS 内的每台设备&#xff0c;根据设备的路由器类型产生一种或多种 LSA。 LSA 的集合形成了 LSDB&#xff08;Link-state Database&#xff09;。 OSPF 中对路由信息的描述都是封装在 LSA 中发布出去的。 常用的 LSA 包括&#xff1a; Router-LSANetwork-LSASummary-LSA&…

postgres启动错误

说明&#xff1a;记录一次在Linux上启动postgres数据错误&#xff1b; 问题&#xff1a;安装好postgres数据库后&#xff0c;我使用systemctl启动数据库&#xff0c;报下面的错误 ● postgresql-15.service - PostgreSQL 15 database serverLoaded: loaded (/usr/lib/systemd…

力扣225 | 两个队列实现栈的思想解析 | 详细图解 Java代码实现

做题链接 目录 前言&#xff1a; 一、思想详解 1.push(x) 2.pop() 弹出栈顶元素 3.top() 获取栈顶元素&#xff08;但不弹出&#xff09; 4.empty() 二、编程实战 1.Java前置知识 2.代码实现&#xff1a; 前言&#xff1a; 栈是一种后进先出数据结构。队列是一种先进…

学习大数据DAY22 Linux 基 本 指 令 3与 在 Linux 系 统 中 配 置MySQL 和 Oracle

目录 网络配置类 ps 显示系统执行的进程 kill systemctl 服务管理 配置静态 ip 常见错误---虚拟机重启网卡失败或者网卡丢失 mysql 操作 上机练习 6---安装 mysql---参考《mysql 安装》文档 解锁 scott 重启后的步骤 上机练习 7---安装 oracle---参考《oracle 安装》…

redis:清除缓存的最简单命令示例

清除redis缓存命令(执行命令列表见截图) 1.打开cmd窗口&#xff0c;并cd进入redis所在目录 2.登录redis redis-cli 3.查询指定队列当前的记录数 llen 队列名称 4.清除指定队列所有记录 ltrim 队列名称 1 0 5.再次查询&#xff0c;确认队列的记录数是否已清除

使用API Monitor探测C++程序在调用HtmlHelp接口打开.chm文件时传入了哪些参数

目录 1、API Monitor介绍 2、为何要使用API Monitor工具&#xff1f; 2、HtmlHelp函数在API列表函数中找不到&#xff0c;将所在模块作为外部Extern DLL模块添加到API Monitor中 3、开启对Beyond Compare工具软件的实时监测 4、在Beyond Compare软件中打开chm帮助文档&…

MiniExcel:.NET中处理Excel的高效方案

在.NET开发环境中&#xff0c;处理Excel文件是一项常见的任务&#xff0c;无论是数据导入、导出还是报表生成。传统的解决方案可能存在性能瓶颈或功能限制。MiniExcel作为一个现代、高效的库&#xff0c;为.NET开发者提供了一个强大的工具来简化Excel操作。本文将介绍MiniExcel…