IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 银河麒麟(V10)-arm版交叉编译-qt-5.13.2源码 -> 正文阅读

[系统运维]银河麒麟(V10)-arm版交叉编译-qt-5.13.2源码

目的

  • 了解如何在x86架构电脑下进行arm程序的交叉编译
  • 了解如何对qt源码程序的交叉编译
  • 了解如何进行qt程序的交叉编译
  • 在网上借鉴了很多大佬的分享,所以自己也总结一下自己经验,希望帮助更多的人
  • 希望大佬积极纠错,大家共同成长

准备步骤

??交叉编译要注意版本问题,主要是向目标机器(最终要运行程序的机器)看齐,多花一些时间把目标机器开发环境的版本搞清楚,找到对应版本的交叉编译链,后面的大方向大多是正确的。
??这次目标机器搭载了银河麒麟(V10 注意不是V10 SP1),版本信息如下

Linux version 4.4.131-20210817.kylin.desktop-generic (YHKYLIN-OS@d0ee15aef8b2) 
(gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6kord1~16.04.12) ) #kylin-KylinOS SMP Tue Aug 17 08:41:44 UTC 2021

??进行交叉编译的环境我用虚拟机搭建,使用ubuntu系统,版本信息如下。

Linux version 5.13.0-40-generic (buildd@ubuntu) (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 
GNU ld (GNU Binutils for Ubuntu) 2.34) #45~20.04.1-Ubuntu SMP Mon Apr 4 09:38:31 UTC 2022

??现在要看一下开发环境的版本问题,其实主要是匹配对gcc的版本,目标机的gcc版本是gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6kord1~16.04.12),ubuntu20.04自带的gcc肯定是不能用,因为那是x86架构版本的。需要找一个匹配目标机gcc版本的交叉编译链安装到虚拟机上,但是版本需要匹配到什么程度才行,是要两个gcc版本必须一致吗?还是存在几个小版本差别的gcc就可以算作匹配。这里还需要查看一个参数,就是libc.so.6的版本(这个文件的历史和作用可以自行百度),这是gcc安装目录下的一个库文件的软连接,找到这个文件执行ls -l,查看结果。目标机版本是libc-2.23.so,那目标机的gcc只能支持2.23这个版本吗?这里可以执行strings /lib/aarch64-linux-gnu/libc.so.6 |grep GLIBC_,查看结果,可以支持的版本有2.17、2.18、2.22、2.23,也就是说我们要找的交叉编译链gcc中的那个库的版本符合其中的一个就行,这样提高了兼容性。

xxx@xxx:/lib/aarch64-linux-gnu$ strings libc.so.6 | grep GLIBC_
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_2.23
GLIBC_PRIVATE

??接下来就是找一个交叉编译链,在上文可以看到目标机gcc的版本是gcc version 5.4.0 20160609,就以这个版本开始前后找。我这次是在下面这个网站找的

https://releases.linaro.org/components/toolchain/binaries/  

folder	4.9-2016.02	-		
folder	4.9-2017.01	-		
folder	5.1-2015.08	-		
folder	5.2-2015.11	-		
folder	5.2-2015.11-1	-	  	
folder	5.2-2015.11-2	-	  
folder	5.3-2016.02	-		
folder	5.3-2016.05	-		
folder	5.4-2017.01	-	//这两个版本看样子符合我们的要求起码是5.4版本的	
folder	5.4-2017.05	-   

??再点击进入几层目录,直接到达这个地址,选择解压后能直接用的成品(还要注意32位、64位,大端序还是小端序,选择基于自己开发环境的系统和机器)

https://releases.linaro.org/components/toolchain/binaries/5.4-2017.05/aarch64-linux-gnu/


Name	                                                    Last modified	    Size	License

gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz	27-Feb-2018 00:14	86.5M	open        //这个是解压后就能用的

??直接下载,放到虚拟机中,解压,首先查看一下上面说到的版本,结果如下,目标机器的版本正好兼容虚拟机的版本,这应该是可以用的

xxx@xxx:/usr/local/gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib$ strings libc.so.6  | grep GLIBC_
GLIBC_2.17
GLIBC_2.18
GLIBC_PRIVATE

??参考博客如下,感谢

https://www.linuxidc.com/Linux/2017-01/139806.htm

https://blog.csdn.net/song_lee/article/details/105487177

https://blog.csdn.net/weixin_39258979/article/details/115427620?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161754731016780357222094%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161754731016780357222094&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-1-115427620.nonecase&utm_term=%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91

交叉编译Qt源码

??在编译源码前一定要阅读一下源码目录下的README文件,基本就能搭配编译环境了
??现在已经找到合适交叉编译链,接下来就可以使用交叉编译链编译Qt源码生产arm版的库文件,大家可以参考下面大佬的博客,我基本是按照他的步骤来的。

https://blog.csdn.net/weixin_39258979/article/details/115434778?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-8.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-8.pc_relevant_default&utm_relevant_index=12

https://download.qt.io/archive/qt/5.15/5.15.2/single/     #qt源码下载网址

??当然,即使是按部就班的来,还是会出现不可预知的问题,前进的道路还是坎坷的,我刚开始是想编译5.15.2版本的,结果报错内存字节没有对齐。接着又尝试4.8.7版本,又错了。最后尝试5.13.2版本,经过多次尝试编译成功。
??编译Qt源码主要是要写好configure参数,大家可以参考一下我的

#!/bin/bash
./configure -prefix /usr/local/qt5.13.2ForArm \
-opensource \
-confirm-license \
-skip qtlocation \   # 这个模块当时编译报错,我用不到为了赶时间直接跳过了
-nomake examples \
-nomake tests \
-xplatform aarch64-linux-gnu-g++  \
-debug \
-no-opengl \

??大家也可以参考这篇文章,看看Qt模块

https://www.devbean.net/2012/08/qt-study-road-2-modules/

??在make install中还遇到了,没有找到python的错误,可以参考这篇文章

https://www.cnblogs.com/SamFang/p/14316969.html

??在执行make的时候,会报错找不到交叉编译器,但我确实添加了编译器的环境变量,在这个问题上纠结了许久,可以参考这篇文章

https://blog.csdn.net/nowayings/article/details/38408557

??按照上述方法可以交叉编译qt源码,并且编译成功,当然模块肯定不是全的,很多模块对应的环境还没有,但是基础使用还是够的。

qtcreator编译arm版qt程序

??直接使用交叉编译链命令行编译程序对我来说有点复杂,还要写Makefile什么的。所以我决定用qtcreator编译程序。这里要注意,在安装qtcreator时,只需要勾选qtcreator模块本身就行了,其他qt提供的编译器不需要。至于qtcreator的版本,我用的也是5.13.2版本。
??操作步骤可以参考下面的博客,可以找qt自带的例子程序编一下,看看能不能通过(我是从windows上找的源码,ubuntu上我没有下载例子程序源码)

https://blog.csdn.net/Guet_Kite/article/details/89304197

??下面是我配置的界面
avatar

avatar

avatar

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 12:16:02  更:2022-04-26 12:19:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:53:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码