统信UOS系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12.8

简介: 上一篇,是使用Qt提供的安装包安装的,有些场景需要使用到自己编译的Qt,所以本篇如何在统信UOS系统上编译Qt5.12.8源码。

前言

  上一篇,是使用Qt提供的安装包安装的,有些场景需要使用到自己编译的Qt,所以本篇如何在统信UOS系统上编译Qt5.12.8源码。


统信UOS系统版本

  系统版本:

  

Qt源码下载

  参考博文《获取下载Qt安装包,Qt源码全国网址备忘录(不用注册Qt账户,即可下载各版本Qt安装包和Qt源码包)》

  需要哪个版本下哪个版本,笔者经常使用得是Qt5.9和Qt5.12两个大版本,本次下载Qt5.12.8:

  

  由于是自己编译的,我们一般在可以安装Qt版本的时候使用Qt安装版本的QtCreator,但是在本篇文章,我们使用源码编译Qt的源码,下一篇用源码编译QtCreator,用以补全完全从源码编译搭建环境(PS:方便基于其他国产芯片使用,x86和amd64不能直接安装)。


Qt从源码编译安装(废弃流程)

步骤一:下载解压

  

tar xvf qt-everywhere-src-5.12.8.tar.xz

  

步骤二:配置Qt

  调整当前目录:

cd /home/yang/work/src/qt-everywhere-src-5.12.8

  然后配置:

./configure -prefix /home/yang/work/qt5.12.8 \
-release \
-opensource \
-platform linux-g++ \
-make libs \
-optimized-qmake \
-pch \
-qt-libjpeg \
-qt-zlib \
-no-opengl \
-skip qt3d \
-skip qtcanvas3d \
-skip qtpurchasing \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-iconv \
-nomake examples \
-nomake tools \
-skip qtvirtualkeyboard \
-v

  

./1.sh

  

  

   输入y

  

步骤三:编译错误“ERROR: Feature ‘precompile_header’ was enabled, but the pre-condition ‘tests.precompile_header’ failed.”解决

  这个问题查看是因为启用了feature,直接禁用掉-no feature-precomplile_header:

  修改1.sh的配置参数:

#!/bin/sh
./configure -prefix /home/yang/work/qt5.12.8 \
-release \
-opensource \
-platform linux-g++ \
-make libs \
-optimized-qmake \
-pch \
-qt-libjpeg \
-qt-zlib \
-no-opengl \
-skip qt3d \
-skip qtcanvas3d \
-skip qtpurchasing \
-skip webengine \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-iconv \
-nomake examples \
-nomake tools \
-skip qtvirtualkeyboard \
-no-feature-precompile_header \
-v

  

  继续执行:

./1.sh

  

  配置成功。

步骤四:编译Qt源码

  根据多年经验,这是个至少长达半小时的过程…

make -j8

  

  编译出现错误:

  

  通过强制Qt编译对ARM处理器的“ neon”支持来解决此问题,只需在“ ./configure”之后的“ qtbase / mkspecs / qmodule.pri”中修改以下行:

vi qtbase /mkspecs /qmodule.pri

  

  (错误路线:配置时去掉precomplile_header才能过去,一直觉得不妥,本次错误又是缺少定义,博主一直怀疑这个问题,在研发过程中发现qmodule.pri去改cpu的时候发现有这个指令,所以干脆直接强制给他添加上了,但是后续论证了,还是报这个错误,所等于个把小时证明无关,继续尝试,但qmodule.pri还是修改了,因为预定是常规功能)

  到这里弄了几个小时这个错误也没有比较大的进展,源码分析一些时间也无解,现在不死磕了,往回退步骤,尝试其他配置路径。


Qt从源码编译安装

步骤一:下载解压

  

tar xvf qt-everywhere-src-5.12.8.tar.xz

  

步骤二:配置Qt

  调整当前目录:

cd /home/yang/work/src/qt-everywhere-src-5.12.8

  然后配置:

./configure -prefix /home/yang/work/qt5.12.8 \
-confirm-license \
-release \
-opensource \
-v

  

  配置通过:

  

  (PS1:有时候是从一开始就走错大方向了,阈值2小时,超过2小时往前面退一个步骤找解决方案)

  (PS2:太晚了,明天再继续)

步骤三:编译Qt源码

  配置基本全开了,配置比较可以,总体也编译了半个多小时。

make -j8

  

  补充一次make(避免多线程的时候,一个编译挂了但是太快没停被其他线程冲掉了输出)

步骤四:安装make install

make install

  前面编译的东西有点多,这里也花了十几分钟才install完成。

  

步骤五:检查Qt使用qmake

  

  至此qmake就编译就好了,但是没有qtcreator,下一篇将编译qtcreator,配置好本篇的编译库来测试开发环境。

相关文章
|
27天前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
37 8
C++ Qt开发:QTcpSocket网络通信组件
|
3月前
|
SQL 数据库 C++
C++ Qt开发:Charts与数据库组件联动
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`Charts`组件与`QSql`数据库组件的常用方法及灵活运用。在之前的文章中详细介绍了关于`QCharts`绘图组件的使用方式,本章将继续延续这个知识点,通过使用`QSql`数据库模块动态的读取某一个时间节点上的数据,当用户点击查询数据时则动态的输出该事件节点的所有数据,并将数据绘制到图形组件内,实现动态查询图形的功能。
33 0
C++ Qt开发:Charts与数据库组件联动
|
4月前
|
存储 SQL 数据库
C++ Qt开发:数据库与TableView多组件联动
在Qt中,通常我们不会在`TableView`等组件中保存数据,一般会将这些数据存储至数据库或者是文件中保存,当使用时则动态的在数据库中调出来,以下案例将实现,当用户点击并选中`TableView`组件内的某一行时,我们通过该行中的`name`字段查询,并将查询结果关联到`ListView`组件内,同时将`TableView`中选中行的字段分别显示在窗体底部的`LineEdit`编辑框内。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`TableView`
42 1
C++ Qt开发:数据库与TableView多组件联动
|
4月前
|
SQL 数据库连接 数据库
C++ Qt开发:QSqlDatabase数据库组件
Qt SQL模块是Qt框架的一部分,它提供了一组类和函数,用于在Qt应用程序中进行数据库操作。这个模块的目标是简化数据库访问和操作,并提供一致的接口,使得开发者可以方便地与不同数据库系统进行交互。一般SQL组件常用的操作,包括读取数据、插入数据、更新数据、删除数据功能,这四个功能我将分别介绍它是如何使用的。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`QSqlDatabase`数据库模块的常用方法及灵活运用。
26 0
C++ Qt开发:QSqlDatabase数据库组件
|
4月前
|
存储 C++ 索引
C++ Qt开发:TableView与TreeView组件联动
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`TableView`与`TreeView`组件联动的常用方法及灵活运用。 本章我们继续实现表格的联动效果,当读者点击`TableView`或`TreeView`中的某一行时,我们让其实现自动跟随功能,且当用户修改行中特定数据时也让其动态的跟随改变,首先绘制一个主界面如图,分别放置两个组件框,底部保留两个按钮,按钮1用于该表表格的行列个数,按钮2则用于设置`TableView`表格表头参数,整个表格我们将其设
31 0
C++ Qt开发:TableView与TreeView组件联动
|
13天前
qt开发使用camera类获取摄像头信息并拍照保存
qt开发使用camera类获取摄像头信息并拍照保存
|
23天前
|
监控 C++
C++ Qt开发:QProcess进程管理模块
Qt是一个跨平台的C++图形库,简化了窗体应用开发,支持通过拖放组件提升效率。本章节关注`QProcess`组件,它用于控制和管理进程,例如执行命令、运行可执行文件及与外部进程通信。`QProcess`提供多种方法如`start`、`waitForStarted`和`waitForFinished`等,实现启动、监控和交互。示例展示了如何使用`QProcess`获取系统进程和信息,通过`tasklist`和`systeminfo`命令,并将结果展示在`QTreeWidget`中。
24 0
C++ Qt开发:QProcess进程管理模块
|
25天前
|
存储 C++ 网络架构
C++ Qt开发:QUdpSocket实现组播通信
Qt教程:使用`QUdpSocket`实现UDP组播通信。通过设置套接字选项、绑定端口、加入和离开组播组,以及发送和接收数据报,简化跨平台窗体应用开发。关键函数包括`setSocketOption`设置多播TTL,`bind`绑定地址和端口,`joinMulticastGroup`加入组播,`leaveMulticastGroup`退出,`writeDatagram`发送,和`readDatagram`接收数据报。
16 1
C++ Qt开发:QUdpSocket实现组播通信
|
26天前
|
存储 网络安全 C++
C++ Qt开发:QUdpSocket网络通信组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QUdpSocket`组件实现基于UDP的网络通信功能。与`QTcpSocket`组件功能类似,`QUdpSocket`组件是 Qt 中用于实现用户数据报协议(UDP,User Datagram Protocol)通信的类。UDP 是一种无连接的、不可靠的数据传输协议,它不保证数据包的顺序和可靠性,但具有低延迟和简单的特点。
19 0
C++ Qt开发:QUdpSocket网络通信组件
|
1月前
|
数据可视化 数据库 C++
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用

推荐镜像

更多