linux_aarch64_qt环境搭建

平台环境:

ubuntu 16.04:

gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)

aarch64 gnu gcc版本:

gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz

Qt交叉编译版本:

qt-everywhere-src-5.12.9.tar.xz

一、aarch64编译器下载

armv7是ARMv7-A指令集架构的缩写,其中“A”表示“应用程序级别”。ARMv7-A架构是ARM架构的第七代,支持32位指令和地址。它是2011年前的大多数ARM芯片所采用的架构,包括Cortex-A7、Cortex-A9和Cortex-A15等。

armv8是ARMv8-A指令集架构的缩写,其中“A”表示“应用程序级别”。ARMv8-A架构是ARM架构的第八代,支持32位和64位指令和地址。它是2011年之后的ARM芯片所采用的架构,包括Cortex-A53、Cortex-A57、Cortex-A72和Cortex-A73等。

aarch64是ARMv8-A指令集架构的64位模式,也称为ARM64。它支持64位指令和地址,并提供更高的寄存器数量和更强大的指令集,因此可以更有效地处理大量数据。大多数现代的ARM芯片都支持aarch64。

需要注意的是,不同架构的ARM处理器之间并不兼容,因此编写代码时需要根据目标平台的架构进行编译。        

下载地址:

https://releases.linaro.org/components/toolchain/gcc-linaro/

可以选binaries,直接是二进制文件。    

f5b9129fbabcdceaf9b9a9754b5d2890.png

418694be26afc1d096c68d463e43a04d.png

x86_64 代表宿主机是64位的,其他的则都为32位的          
_be 代表是大端模式,不带该字段的为小端模式

或者从ARM官网下载:https://developer.arm.com/downloads/-/gnu-a

二、使用aarch64 linux gnu编译开源库

我这开始编译的是protobuf-2.6.1,没编过...后来编译protobuf-3.6.1是ok的。

效果如下:

ffc630dac0ca6746cd92164cee507705.png    

32位编译失败error:

3d2fd086702ee61a65978f4edce09180.png

protobuf有configure文件,直接用以前写好的就行。

#配置aarch64环境变量

export PATH=/opt/aarch64-linux-gnu-5.4.1/bin:$PATH

build:执行代码编译的主机,正常的话就是你的主机系统。这个参数一般由config.guess来猜就可以。当然自己指定也可以。

host:编译出来的二进制程序所执行的主机,因为绝大多数是本机编译,本机执行,所以这个值就等于build。只有交叉编译的时候(也就是本机编译,其他系统机器执行)才会build和host不同。用host指定运行主机。

./configure --host=aarch64-linux-gnu \


            --prefix=${libdir} \


        CFLAGS="${CFLAGS} -fPIC"   \


        CXXFLAGS="$CXXFLAGS -fPIC" \


       --enable-static=yes

如果不指定-fPIC,64位系统使用静态库时会报:

“relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC”

三、Qt交叉编译环境搭建

如果你的程序用到了Qt,那么还需要交叉编译Qt。

Qt下载:https://download.qt.io/archive/qt/5.12/5.12.1/single/

解压需要一小会儿。    

01c7f7179f9f1d97029ee5685e97977a.png

需要修改编译器(参考https://blog.csdn.net/u013232740/article/details/122501522):

文件路径:

./qt-everywhere-src-5.12.1/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf

默认配置文件:

QMAKE_CC                = arm-linux-gnueabi-gcc
QMAKE_CXX               = arm-linux-gnueabi-g++
QMAKE_LINK              = arm-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabi-g++


  
QMAKE_AR                = arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabi-objcopy
QMAKE_NM                = arm-linux-gnueabi-nm -P
QMAKE_STRIP             = arm-linux-gnueabi-strip

修改后为:

21c9c52d813be8b28283fac5c9b81e7e.png

有configure文件:    

./configure -recheck-all -release -extprefix qt-5.12.9-arm-64
 -xplatform linux-aarch64-gnu-g++ -no-opengl -no-openssl 
 -nomake tests -no-compile-examples -nomake examples 
 -gif -ico -qt-libpng -qt-libjpeg -qt-sqlite

注意xplatform。我用这个编译成功了。

编译OK,可以给Qt再添加一个编译器。或者对Qt的pro文件直接使用qmake进行编译。

四、Qt交叉编译环境搭建

直接整不行,需要设置环境变量。

c92cecb4e013f8f1a04369633dbacb4c.png

source ./env.sh

107b9c18cba1e1faae42b53a21965c89.png

一睹.qmake.stash内容:    

16900bf74c5a53c402766d1c2bdb7932.png

有了Makefile自然可以make -j8.

be3636ca3e80d550f3680e523b41f505.png

虽然我写的是make -j8,但我用的是make -j16。

验证:    

f7e2484e9412e0e266138f5639eab7f7.png

如需获取各种好用的脚本,可在公众号后台留言"编译脚本"。

欢迎关注,不时分享学习过程,见证普通程序员的职业生涯。

cab7404bc2b4226509d8374dfb63d1b1.png  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elastic Agent 的安装及使用

概述 Elastic Agent是Elastic Stack中的一个全新组件,旨在简化和统一监控和集成管理流程。它是一个轻量级的代理,可以部署到各种不同类型的主机和容器中,用于收集系统指标、日志和事件数据,并将其发送到Elasticsearch进行存储和分析。 在es7及以前的版本中,使用 elast…

阿里云和腾讯云2核4G服务器租用价格对比,选哪个好?

租用2核4G服务器费用多少?2核4G云服务器多少钱一年?1个月费用多少?阿里云2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年;腾讯云轻量2核4G服务器5M带宽165元一年、252元15个月、540元三…

算法打卡day14|二叉树篇03|Leetcode 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

算法题 Leetcode 104.二叉树的最大深度 题目链接:104.二叉树的最大深度 大佬视频讲解:二叉树的最大深度视频讲解 个人思路 可以使用层序遍历,因为层序遍历会有一个层数的计算,最后计算到的层数就是最大深度; 解法 迭代法 就是…

AJAX 02 案例、Bootstrap框架

AJAX 学习 AJAX 2 综合案例黑马 API01 图书管理Bootstrap 官网Bootstrap 弹框图书管理-渲染列表图书管理-添加图书图书管理-删除图书图书管理 - 编辑图书 02 图片上传03 更换图片04 个人信息设置信息渲染头像修改补充知识点:label扩大表单的范围 AJAX 2 综合案例 黑…

图片制作二维码能批量生成吗?快捷在线制作二维码的技巧

现在很多场景下获取内容的方式都会通过扫描二维码来获取,比如常见的有文本内容、图片照片、音频视频等。二维码制作的方法也越来越简单,只需要通过二维码生成器的功能就可以快速完成,那么如果需要将多张图片每一张单独生成二维码使用时&#…

学习笔记--强化学习(1)

参考:https://blog.csdn.net/koulongxin123/article/details/122676149 1.什么是强化学习? (1)定义 基于环境的反馈而行动,通过不断与环境的交互、试错,最终完成特定目的或者使得整体行动收益最大化(是一种通过与环境…

如何评估产品说明书的质量和有效性

评估产品说明书的有效性和质量涉及多个关键方面,这些方面共同决定了说明书是否能够满足用户的需求,提供准确、清晰且有价值的信息。以下是一些建议的评估步骤和标准: 1、完整性检查: 确保产品说明书涵盖了产品的所有关键功能和特…

ai怎么制作ppt?保姆级的ai一键生成ppt教程来了!

面对市面上多如牛毛的 ai 生成 ppt 软件,哪一款更适合日常使用呢?与此同时,在选定一款 ai 软件后,如何用 ai 制作 ppt,也是很多人第一次使用 pptai 工具会面临的具体问题。 就着这些问题,在接下来的文章中…

【分类讨论】【解析几何】【 数学】【推荐】1330. 翻转子数组得到最大的数组值

作者推荐 视频算法专题 本文涉及知识点 分类讨论 解析几何 LeetCode1330. 翻转子数组得到最大的数组值 给你一个整数数组 nums 。「数组值」定义为所有满足 0 < i < nums.length-1 的 |nums[i]-nums[i1]| 的和。 你可以选择给定数组的任意子数组&#xff0c;并将该子…

Mac电脑搭建前端项目环境,并适配老项目

1.上一篇文章中&#xff0c;我说到了&#xff0c;node.js中文网下载node 包&#xff0c;根据系统进行选择&#xff0c;然后安装包node即可&#xff0c;对于比较新的项目确实也是适用的&#xff0c;但是老项目就不行了会报错&#xff0c;node版本过高&#xff0c;导致环境不匹配…

全栈的自我修养 ———— python使用绘制工具turtle

实现基础turtle入门 一、下载二、基础知识三、实现效果1、圆2、五3、蛇5、循环的正方形 一、下载 turtle是python中模块中自带的一般不需要下载如果报错如下&#xff0c;需要下载自己下载python-tk模块,详细请看python-tk下载 (mac的话可以直接用brew install python-tk) (my…

Kubernetes operator系列:webhook 知识学习

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列文章&#xff0c;本节会对 kubernetes webhook 知识进行学习 本文的所有代码&#xff0c;都存储于github代码库&#xff1a;https://github.com/graham924/share-code-operator-st…

Pixelmator Pro:专业级图像编辑,触手可及mac版

Pixelmator Pro是一款功能强大的图像编辑软件&#xff0c;专为Mac操作系统设计。它拥有直观的界面和丰富的工具&#xff0c;能够满足用户各种图像处理需求。 Pixelmator Pro软件获取 首先&#xff0c;Pixelmator Pro支持多种文件格式&#xff0c;包括JPEG、PNG、GIF、BMP、TIF…

1.Python数据分析—数据分析与挖掘详讲

1.Python数据分析—数据分析与挖掘详讲 一个人简介二数据分析与挖掘概述三什么是数据分析和挖掘四数据分析与挖掘在不同领域的应用4.1医疗领域&#xff1a;4.1.1 建立疾病数据库&#xff1a;4.1.2 临床决策支持&#xff1a;4.1.3 疾病预警和监控&#xff1a; 4.2 电子商务领域&…

将Linux curl命令转换为windows平台的Python代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

unity3d Animal Controller的Animal组件中Stances,Advanced基础部分理解

Stances 立场 立场要求在动物动画控制器上的姿态动画参数。 你可以有多个运动状态,并根据当前的立场使用它们 过渡的条件是: Stance StanceID Default Stance默认姿势 如果调用函数Stance_Reset&#xff08;&#xff09;&#xff0c;动物将返回到的默认姿势。 Current …

SpringBoot扩展篇:Spring注入 @Autowired @Resource

Spring注入 Autowired & Resource 1. 概述1.1 职责1.2 流程概述 2. Demo3. AutowiredAnnotationBeanPostProcessor注册4. 注册元数据4.1 AutowiredAnnotationBeanPostProcessor#postProcessMergedBeanDefinition4.2 AutowiredAnnotationBeanPostProcessor#findAutowiringMe…

Android 仿天通卫星对准(卫星在圆形卫星轨道上转动)效果实现

效果图 View源码 package com.android.circlescalebar.view;import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics…

人工智能入门学习笔记1:什么是人工智能

一、什么是人工智能 人工智能(Artificial Intelligence)&#xff0c;是一个以计算机科学&#xff08;Computer Science&#xff09;为基础&#xff0c;由计算机、心理学、哲学等多学科交叉融合的交叉学科、新兴学科&#xff0c;研究、开发用于模拟、延伸和扩展人的智能的理论、…

springboot+ssm基于vue.js的客户关系Crm管理系统

系统包含两种角色&#xff1a;管理员、用户&#xff0c;主要功能如下。 ide工具&#xff1a;IDEA 或者eclipse 编程语言: java 数据库: mysql5.7 框架&#xff1a;ssmspringboot都有 前端&#xff1a;vue.jsElementUI 详细技术&#xff1a;springbootSSMvueMYSQLMAVEN 数据库…