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.rhkb.cn/news/273944.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息系统项目管理师009:消费互联网(1信息化发展—1.3现代化创新发展—1.3.3 消费互联网)

文章目录 1.3.3 消费互联网1.基本属性2.应用新格局 1.3.3 消费互联网 消费互联网是以个人为用户,以日常生活为应用场景的应用形式,满足消费者在互联网中的消费需求而生的互联网类型。消费互联网以消费者为服务中心,针对个人用户提升消费过程的…

Elastic Stack--08--SpringData框架

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 SpringData[官网: https://spring.io/projects/spring-data](https://spring.io/projects/spring-data) Spring Data Elasticsearch 介绍 1.SpringData-…

什么是数据采集与监视控制系统(SCADA)?

SCADA数据采集是一种用于监控和控制工业过程的系统。它可以实时从现场设备获得数据并将其传输到中央计算机,以便进行监控和控制。SCADA数据采集系统通常使用传感器、仪表和控制器收集各种类型的数据,例如温度、压力、流量等,然后将这些数据汇…

Java 使用 EasyExcel 实现导入导出(新手篇教程)

官网镇楼↓&#xff0c;觉得我写的不好的同学可以去官网看哦 EasyExcel Maven <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.3</version> </dependency> Excel 导入 示例&…

【亲测有效】解决三月八号ChatGPT 发消息无响应!

背景 今天忽然发现 ChatGPT 无法发送消息&#xff0c;能查看历史对话&#xff0c;但是无法发送消息。 可能的原因 出现这个问题的各位&#xff0c;应该都是点击登录后顶部弹窗邀请 [加入多语言 alapha 测试] 了&#xff0c;并且语言选择了中文&#xff0c;抓包看到 ab.chatg…

ChatGPT+MATLAB应用

MatGPT是一个由chatGPT类支持的MATLAB应用程序&#xff0c;由官方Toshiaki Takeuchi开发&#xff0c;允许您轻松访问OpenAI提供的chatGPT API。作为官方发布的内容&#xff0c;可靠性较高&#xff0c;而且也是完全免费开源的&#xff0c;全程自己配置&#xff0c;无需注册码或用…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:QRCode)

用于显示单个二维码的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 二维码组件的像素点数量与内容有关&#xff0c;当组件尺寸过小时&#xff0c;可能出现无法展示内容的情况&#xff0c;…

6.S081的Lab学习——Lab1: Xv6 and Unix utilities

文章目录 前言一、启动xv6(难度&#xff1a;Easy)解析&#xff1a; 二、sleep(难度&#xff1a;Easy)解析&#xff1a; 三、pingpong&#xff08;难度&#xff1a;Easy&#xff09;解析&#xff1a; 四、Primes(素数&#xff0c;难度&#xff1a;Moderate/Hard)解析&#xff1a…

使用maven打生产环境可执行包

一、程序为什么要打包 程序打包的主要目的是将项目的源代码、依赖库和其他资源打包成一个可执行的文件或者部署包&#xff0c;方便程序的发布和部署。以下是一些打包程序的重要理由&#xff1a; 方便部署和分发&#xff1a;打包后的程序可以作为一个独立的实体&#xff0c;方便…

System是什么?为什么不能直接输出null?

在看学习下面的知识前&#xff0c;得先对java核心类库有个大致的了解&#xff0c;详情可参考链接 java基本概念-扩展点-CSDN博客 1、System 1.1 System是什么&#xff1f; System是一个类&#xff0c;它包含了一些有用的属性和方法。 1.2 System实现的功能 &#xff08;1&…

openssl3.2 - 官方demo学习 - encode - ec_encode.c

文章目录 openssl3.2 - 官方demo学习 - encode - ec_encode.c概述笔记产生ecc私钥产生ecc公钥测试工程备注备注END openssl3.2 - 官方demo学习 - encode - ec_encode.c 概述 官方demos/encode 目录中给了2个例子工程 功能是载入(RSA/ECC)公钥, 然后自己就可以拿内存中的公钥对…

仿牛客网项目---消息队列的实现

本篇文章讲一讲我们的项目中用到的消息队列。 1.阻塞队列 2.kafka 我的项目为什么要用消息队列&#xff1f; 如果采用消息队列&#xff0c;那么评论、点赞、关注三类不同的事&#xff0c;可以定义三类不同的主题&#xff08;评论、点赞、关注&#xff09;&#xff0c;发生相应…

JDK环境变量配置-jre\bin、rt.jar、dt.jar、tools.jar

我们主要看下rt.jar、dt.jar、tools.jar的作用&#xff0c;rt.jar在​%JAVA_HOME%\jre\lib&#xff0c;dt.jar和tools.jar在%JAVA_HOME%\lib下。 rt.jar&#xff1a;Java基础类库&#xff0c;也就是Java doc里面看到的所有的类的class文件。 tools.jar&#xff1a;是系统用来编…

报名开启丨掘金海外,探寻泛娱乐社交APP出海新风口

随着国内泛娱乐行业用户规模趋于见顶&#xff0c;泛娱乐社交APP转向出海是必然趋势。 根据行业数据显示&#xff0c;有超过35%的国内实时社交企业已启动或者正在规划出海&#xff0c;而其中出海商户的音视频流量增长均超过了100&#xff05;。尤其是在东南亚、中东、拉美等新兴…

企业数据备份体系化方法论的七大原则:数据生命周期规划:资产管理的新篇章

在数字化浪潮中&#xff0c;数据如同新时代的石油&#xff0c;成为了推动企业前进的核心动力。但与所有宝贵资源一样&#xff0c;如果我们不能妥善管理&#xff0c;这种无形的资产就难以发挥其应有的价值。这就是为何数据生命周期规划&#xff08;DLP&#xff09;显得如此重要。…

mangoDB:2024安装

mangoDB:2024安装 mangoDB: 下载链接 取消勾选 配置环境变量 启动服务 同级目录下创建一个db文件夹 然后执行命令&#xff0c;启动服务 mongod --dbpath D:\environment\mango\db访问http://localhost:27017/ 出现下面的就是安装成功 2然后在管理员权限下给mango服务重…

研发效能DevOps: OpenEuler 部署 drone 持续集成平台

目录 一、实验 1.环境 2.OpenEuler 部署 drone 持续集成平台 二、问题 1.drone登录失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168.204.145&#xff08;动态&#xff09; 192.168.204.141&…

Linux - 安装 Jenkins(详细教程)

目录 前言一、简介二、安装前准备三、下载与安装四、配置镜像地址五、启动与关闭六、常用插件的安装 前言 虽然说网上有很多关于 Jenkins 安装的教程&#xff0c;但是大部分都不够详细&#xff0c;或者是需要搭配 docker 或者 k8s 等进行安装&#xff0c;对于新手小白而已&…

虚拟机中安装Win98

文章目录 一、下载Win98二、制作可启动光盘三、VMware中安装Win98四、Qemu中安装Win981. Qemu的安装2. 安装Win98 Win98是微软于1998年发布的16位与32位混合的操作系统&#xff0c;也是一代经典的操作系统&#xff0c;期间出现了不少经典的软件与游戏&#xff0c;还是值得怀念的…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:CalendarPicker)

日历选择器组件&#xff0c;提供下拉日历弹窗&#xff0c;可以让用户选择日期。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 CalendarPicker(options?: CalendarOptions) …