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

一键编译QT5源码脚本(交叉编译arm64、mips64版本)

前言

这几天为了编写国产专用机上的软件,又盘起了交叉编译..

一开始想使用深度最新的deepin 23正式版做系统,搭建编译环境。然而交叉编译链工具直接安装失败!

然后又装了Debian12原版系统,编译环境倒是顺利搭建起来,但是编译出来的程序在目标系统中运行不了,可能是GLIBC版本过高导致..

然后又又又装了kali,结果和Debian12是一样的情况...

不过让我感到意外的是,kali中居然有龙架构(LoongArch)的编译链工具..

之前写过一篇文章,讲过交叉编译这事:

QT5交叉编译保姆级教程(arm64、mips64)

这里不重复去讲,主要是提供脚本..

最终的系统

折腾了好几个系统,最终选择了深度的deepin 20.9

下载地址:Index of /releases/20.9/

使用的QT源码版本:5.12.2

官网下载地址:https://download.qt.io/archive/qt/5.12/5.12.2/single/qt-everywhere-src-5.12.2.tar.xz     注意:现在需要科学上网才可以访问

本文基于此系统和源码版本,其它环境无法保证文中内容的可行性!

安装所需组件

#安装编译所需组件
sudo apt update
sudo apt install build-essential libgl1-mesa-dev gperf libclang-dev llvm flex bison -y#安装编译链工具:
sudo apt install g++-aarch64-linux-gnu -y
sudo apt install gcc-aarch64-linux-gnu -y
sudo apt install gcc-mips64el-linux-gnuabi64 -y
sudo apt install g++-mips64el-linux-gnuabi64 -y

aarch64(arm64)的一键编译脚本

#!/bin/bash
#注意修改sky为你自己系统的登陆密码。如果想手动输入密码,请把这条注释或删除
echo sky|sudo -S echo#设置QT源码解压后的目录,请自行修改!
qtDir="/ram/qt-everywhere-src-5.12.2"#设置QT源码文件位置,请自行修改!
qtFile="/media/user/DAF89D85F89D6095/qt-everywhere-src-5.12.2.tar.xz"#删除已存在的源码目录
if [ -d $qtDir ];thenecho 存在源码目录,删除中..sudo rm -rf $qtDir
fi#重新解压源码
if [ -f  ];thenecho 开始解压..
#请自行修改/ram这个目录tar xf $qtFile --directory=/ram
fi#进入解压后的源码目录
cd $qtDir#QT5.12.2需要修改.h文件,以解决编译错误
sed -i '43a#include <limits>' ./qtbase/src/corelib/global/qendian.h
sed -i '44a#include <limits>' ./qtbase/src/corelib/tools/qbytearraymatcher.h
sed -i '48a#include <limits>' ./qtbase/src/tools/moc/generator.cpp
sed -i '54a#include <limits>' ./qtdeclarative/src/qml/jsruntime/qv4propertykey_p.h
sed -i '52a#include <limits>' ./qtdeclarative/src/qmldebug/qqmlprofilerevent_p.hecho 配置编译参数..
#/usr/local/qt5.12.2arm 这个目录可自行修改
./configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /usr/local/qt5.12.2arm -no-opengl -silent -qpa linuxfb -nomake examples -nomake testsecho 编译开始
#根据自身CPU线程数修改12这个数
make -j12echo 开始安装
sudo make installecho 编译、安装完成
read -n 1

mips64的一键编译脚本

#!/bin/bash
#注意修改sky为你自己系统的登陆密码。如果想手动输入密码,请把这条注释或删除
echo sky|sudo -S echo#设置QT源码解压后的目录,请自行修改!
qtDir="/ram/qt-everywhere-src-5.12.2"#设置QT源码文件位置,请自行修改!
qtFile="/media/user/DAF89D85F89D6095/qt-everywhere-src-5.12.2.tar.xz"mkspecsDir="$qtDir/qtbase/mkspecs"#删除已存在的源码目录
if [ -d $qtDir ];thenecho 存在源码目录,删除中..sudo rm -rf $qtDir
fi#重新解压源码
if [ -f  ];thenecho 开始解压..
#请自行修改/ram这个目录tar xf $qtFile --directory=/ram
fi#进入解压后的源码目录
cd $qtDir#QT5.12.2需要修改.h文件,以解决编译错误
sed -i '43a#include <limits>' ./qtbase/src/corelib/global/qendian.h
sed -i '44a#include <limits>' ./qtbase/src/corelib/tools/qbytearraymatcher.h
sed -i '48a#include <limits>' ./qtbase/src/tools/moc/generator.cpp
sed -i '54a#include <limits>' ./qtdeclarative/src/qml/jsruntime/qv4propertykey_p.h
sed -i '52a#include <limits>' ./qtdeclarative/src/qmldebug/qqmlprofilerevent_p.h#创建mips64所需的目录
cp -R $mkspecsDir/linux-aarch64-gnu-g++ $mkspecsDir/linux-mips64el-g++
#替换qmake.conf文件内容
sed -i 's/aarch64-linux-gnu/mips64el-linux-gnuabi64/g' $mkspecsDir/linux-mips64el-g++/qmake.confecho 配置编译参数..
#/usr/local/qt5.12.2mips64 这个目录可自行修改
./configure -release -opensource -confirm-license -xplatform linux-mips64el-g++ -prefix /usr/local/qt5.12.2mips64 -no-opengl -silent -qpa linuxfb -nomake examples -nomake testsecho 编译开始
#根据自身CPU线程数修改12这个数
make -j12echo 开始安装
sudo make installecho 编译、安装完成
read -n 1

将脚本内容保存为文件,然后使用命令添加运行权限:chmod +x  脚本文件名

这样就可以双击运行了。

至于编译安装后,Qt Creator的配置还是去看这篇吧:QT5交叉编译保姆级教程(arm64、mips64)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 春秋云镜(ZZCMS 2023)·CVE-2023-50104
  • 深入探究Nginx中的URL哈希负载均衡策略
  • 引用和类型强转
  • Java算法之快速排序(Quick Sort)
  • AMD Zen 5 微架构及其市场策略
  • 简单排序(sort)
  • Openstack 与 Ceph集群搭建(完结): 配置Ceph作为Openstack后端存储
  • 如何打造基于Java SpringBoot和Vue的医院门诊智能预约平台?四步实现高效就医流程,整合MySQL数据库,优化用户体验。
  • 功能测试常用的测试用例大全
  • C#泛型相关
  • 【最新华为OD机试E卷】boos的收入(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 网易校招面试题 - 如何给 10 台机器安装 Nginx
  • 视频中间件:与海康ISC平台级联
  • RK3588 系列之1—串口连接
  • Leetcode Hot 100刷题记录 -Day6(滑动窗口)
  • [译] React v16.8: 含有Hooks的版本
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • CEF与代理
  • CSS居中完全指南——构建CSS居中决策树
  • Git的一些常用操作
  • LintCode 31. partitionArray 数组划分
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 初识 beanstalkd
  • 前端技术周刊 2019-02-11 Serverless
  • 深入浅出Node.js
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 中文输入法与React文本输入框的问题与解决方案
  • nb
  • No resource identifier found for attribute,RxJava之zip操作符
  • ‌内网穿透技术‌总结
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #define用法
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • *1 计算机基础和操作系统基础及几大协议
  • .env.development、.env.production、.env.staging
  • .net framework 4.8 开发windows系统服务
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET实现之(自动更新)
  • .net专家(高海东的专栏)
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @SpringBootConfiguration重复加载报错
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [<MySQL优化总结>]
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [C/C++随笔] char与unsigned char区别
  • [C++]命名空间等——喵喵要吃C嘎嘎
  • [C++]运行时,如何确保一个对象是只读的