CentOS编译安装Qt(Qt可使用静态编译编译器)_type 'o' if you want to use the open source editio-程序员宅基地

技术标签: 环境配置  Qt  编译器  qt  静态编译  linux  centos  

CentOS编译安装Qt(Qt可使用静态编译编译器)

前言

  Qt写GUI非常方便,Qt也可以跨平台。但是Qt的跨平台和Java的不太一样,Qt跨平台是一次编码处处编译的,所以如果想把在Windows写的程序移殖到Linux,那么免不了要在Linux里安装Qt。下面以CentOS为例编译安装Qt。

下载Qt源码

  首先在网上下载Qt的源码,然后才可以编译。
  源码可在如下网址下载:
http://download.qt.io/archive/qt/
  我是下载的Qt4.7.4(进入网址后先点4.7/然后再点qt-everywhere-opensource-src-4.7.4.tar.gz),想下载和我一样版本的可以按照我的方法点击下载,如果不想跳转到那个网页后自己选,可以直接点击http://download.qt.io/archive/qt/4.7/qt-everywhere-opensource-src-4.7.4.tar.gz下载。

编译安装——以4.7.4为例

  首先把源码解压,然后进入解压源码的目录,比如终端下命令行:

tar zxvf qt-everywhere-opensource-src-4.7.4.tar.gz
cd qt-everywhere-opensource-src-4.7.4

  到这里又是熟悉的三步曲了(配置、编译、安装)。
终端下命令行:

./configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg -nomake demos -nomake examples -qt-sql-sqlite -prefix /usr/local/Trolltech/Qt-4.7.4_static

回车后它会提示:

Type 'c' if you want to use the Commercial Edition.
Type 'o' if you want to use the Open Source Edition.

这时输入o回车,之后它会问你是否同意一个许可(License),输入yes回车即可。

虽然标题是CentOS下安装Qt,但是我也用过Ubuntu安装,在Ubuntu配置时,可能会出现一个问题:
Basic XLib functionality test failed!
解决方法是:
sudo apt-get install libx11-dev libxext-dev libxtst-dev

完成配置后继续:

make	#如果嫌太慢,可以用make -j2或make -j3,之类使用多个线程同时编译(-jx就是x个线程)
sudo make install

  整个过程如果没报错就安装成功了。如果任何一个地方报错,就要处理了,下面是我遇到过的问题:
  make时出现:/usr/bin/ld: cannot find -lXrender
  解决方法:sudo yum install libXrender*

安装QtCreator

  可以用QtCreator来编译你的程序代码。
  到如下网址随便选一个版本的QtCreator下载即可:
http://download.qt.io/official_releases/qtcreator/
  虽然版本是随便选,但是在CentOS下用的话,一定要选linux的,后缀是.run的。

设置编译器

  一般安装了QtCreator后,QtCreator不能自己检测到你的编译器(就是刚刚编译安装那个编译器,QtCreator不能自动检测到),所以要手动设置。
  网上有很多人说要动环境,要在一些配置文件里改来改去,其实不需要,直接在QtCreator里设置就好了。
  启动QtCreator后(如果是CentOS系统,安装了QtCreator后,直接在左上角“应用程序”的“编程”里可以找到QtCreator,单击即可启动)单击“工具”然后点“选项”:
应用程序-编程
工具-选项

  在“构建和运行”里的“Qt Versions”里,添加你的编译器(如果你是完全按照我什么的步骤来的话,你的编译器路径应该是:/usr/local/Trolltech/Qt-4.7.4_static/bin/qmake)
Qt Versions

图片里有两个编译器是因为我之前编译过一个非静态编译器,编译非静态编译器的方法非常简单,就是前面配置的时候,什么都不写就行了,把之前的./configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg -nomake demos -nomake examples -qt-sql-sqlite -prefix /usr/local/Trolltech/Qt-4.7.4_static换成./configure就好了。

  然后在“构建套件(Kit)”里添加一个Kit,把它的“Qt 版本”设置成你刚刚添加的那个:
Kit
  然后你的Qt就能用了,而且还是使用静态编译的。

附加——Windows Qt静态编译的方法(以5.4为例)

  很多时候,用Qt只是想写一个小工具而已,但是每次打包都会出现七大姑八大姨的dll。如果是静态编译,就可以不需要打包了,编译出来的exe直接给别人就能用了。(静态编译出来的exe文件大小大概在17M,调的库越多,程序越复杂,exe就越大)

需要的工具

编译源码之前要确保你有以下工具:

  1. Perl,下载地址:https://www.activestate.com/products/perl/downloads/
  2. Python,下载地址:https://www.python.org/downloads/

  编译的方法和前面CentOS的差不多,但是源码基本上是不需要下载的,因为你能想到要在Windows静态编译你的Qt你肯定是已经在Windows里安装了Qt了的,而绝大多数情况下你安装的Qt就是附带源码的。
  首先打开你的Qt(是Qt不是QtCreator)
Qt
  是这个东西,就是平时用来打包的工具。
  然后cd到你的源码目录:
cd
  先试试工具都配置好了没有:

gcc -v
perl -v
python

检查环境
  没报错,能用,就行了。
  然后就又是熟悉的三步曲了(配置,编译,安装)。

配置

你的程序不需要使用openssl

  一般没用到加密算法的,没有访问https的,都是不需要openssl的,Qt编译起来比较简单。(上面CentOS下的Qt也是没有用到openssl的)

configure.bat -confirm-license -opensource -platform win32-g++ -debug-and-release -static -prefix "E:\Qt5.4.0\Qt5.4.0\5.4\mingw491_32_static" -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -opengl desktop -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtwebengine

注意:上面的"E:\Qt5.4.0\Qt5.4.0\5.4\mingw491_32_static"是你想要把静态编译编译器安装到的路径,可以改。

你的程序需要使用openssl

  如果你的程序访问了https,那么不链接openssl的话,你的程序基本上是废了,所以编译的方法略有不同。建议使用openssl的静态编译编译器版本和不使用openssl的静态编译编译器版本要分开来,如果你只有使用openssl的编译器,你的静态编译也是很痛苦的,因为使用了openssl的静态编译器在任何一个你编译的程序需要复制openssl的dll到你的exe目录,也就是说这种静态编译不完美,所以没有使用到openssl的程序还是建议用不使用openssl的静态编译器编译。
  首先要先安装openssl,进入如下网站:
http://slproweb.com/products/Win32OpenSSL.html
openssl
  下载后把它安装了就行。

开始配置:

configure.bat -confirm-license -opensource -platform win32-g++ -debug-and-release -static -prefix "E:\Qt5.4.0\Qt5.4.0\5.4\mingw491_32_static_ssl" -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -opengl desktop -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32 -lgdi32" -L C:\OpenSSL-Win32 -I C:\OpenSSL-Win32\include -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtwebengine

其中:"E:\Qt5.4.0\Qt5.4.0\5.4\mingw491_32_static_ssl"为欲安装到的目录;C:\OpenSSL-Win32为openssl的安装目录;C:\OpenSSL-Win32\include为openssl安装目录里的include。都要和你的电脑里openssl的安装路径对应上。

编译

mingw32-make -j2	#-j2是用两个线程编译,因为编译时间实在是太长了,如果你的电脑够好,还可以再开多几个线程

安装

mingw32-make install

配置编译器

  和CentOS一样,在QtCreator里设置Qt Versions和Kit,Qt Versions的路径是编译器安装路径+"\bin\qmake.exe"。
  然后和CentOS不同的是,Windows还需要改一个东西。用记事本打开静态编译的编译器目录下的mkspecs\win32-g++\qmake.conf文件。修改两个配置(QMAKE_LFLAGS和QMAKE_LFLAGS_DLL,都改为-static)。
修改配置

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nicedante/article/details/106584997

智能推荐

力扣平衡二叉搜索树的创建:将有序数组转换为二叉搜索树-程序员宅基地

文章浏览阅读214次,点赞6次,收藏3次。其中mid的使用非常值得记忆。

QT设置QLabel中字体的颜色_qolable 字体颜色-程序员宅基地

文章浏览阅读8k次,点赞2次,收藏6次。QT设置QLabel中字体的颜色其实,这是一个比较常见的问题。大致有几种做法:一是使用setPalette()方法;二是使用样式表;三是可以使用QStyle;四是可以在其中使用一些简单的HTML样式。下面就具体说一下,也算是个总结吧。第一种,使用setPalette()方法如下:QLabel *label = new QLabel(tr("Hello Qt!"));QP_qolable 字体颜色

【C#】: Import “google/protobuf/timestamp.proto“ was not found or had errors.问题彻底被解决!_import "google/protobuf/timestamp.proto" was not f-程序员宅基地

文章浏览阅读3.7k次。使用C# 作为开发语言,将pb文件转换为cs文件的时候相信很多人都会遇到一个很棘手的问题,那就是protoc3环境下,import Timestamp的问题,在头部 import “google/protobuf/timestamp.proto”;的时候会抛异常:google/protobuf/timestamp.proto" was not found or had errors;解决办法【博主「pamxy」的原创文章的分享】:(注:之后才发现,不需要添加这个目录也可以,因为timestamp.p_import "google/protobuf/timestamp.proto" was not found or had errors.

安卓抓取JD wskey + 添加脚本自动转换JD cookie_jd_wsck-程序员宅基地

文章浏览阅读4.1w次,点赞9次,收藏98次。一、准备工具: 1. app:VNET(抓包用)、京东; 安卓手机需要下载VNET软件。下载官网:https://www.vnet-tech.com/zh/ 2. 已安装部署好的青龙面板;二、抓包wskey: 1. 打开已下载的VNET软件,第一步先安装CA证书; 点击右下角三角形按钮(开始抓包按钮),会提示安装证书,点击确定即可,app就会将CA证书下载至手机里,随后在手机设置里进行安装,这里不同手机可能安装位置不同,具体..._jd_wsck

Mybatis-Plus自动填充失效问题:当字段不为空时无法插入_mybatisplus插入不放为空的字段-程序员宅基地

文章浏览阅读2.9k次,点赞7次,收藏3次。本文针对mybatis-plus自动填充第一次更新能正常填充,第二次更新无法自动填充问题。????mybatis-plus自动填充:当要填充的字段不为空时,填充无效问题的解决????先上一副官方的图:取自官方:https://mp.baomidou.com/guide/auto-fill-metainfo.html第三条注意事项为自动填充失效原因:MetaObjectHandler提供的默认方法的策略均为:如果属性有值则不覆盖,如果填充值为null则不填充以官方案例为例:```java_mybatisplus插入不放为空的字段

Matlab 生成exe执行文件_matlab exe-程序员宅基地

文章浏览阅读1w次,点赞25次,收藏94次。利用 Application Complier 完成MATLAB转exe文件_matlab exe

随便推点

树状数组 POJ 2352 Star-程序员宅基地

文章浏览阅读907次。#include #include using namespace std;#define SIZE 320010#define CLR( arr, val ) memset( arr, val, sizeof(arr) )int tree[SIZE];int level[SIZE];int max_size;int lowBit( int index ){

MIT-BEVFusion系列五--Nuscenes数据集详细介绍,有下载好的图片_nuscense数据集-程序员宅基地

文章浏览阅读2.3k次,点赞29次,收藏52次。nuScenes 数据集 (pronounced /nu:ːsiː:nz/) 是由 Motional (以前称为 nuTonomy) 团队开发的自动驾驶公共大型数据集。nuScenes 数据集的灵感来自于开创性的 KITTI 数据集。nuScenes 是第一个提供自动驾驶车辆整个传感器套件 (6 个摄像头、1 个 LIDAR、5 个 RADAR、GPS、IMU) 数据的大型数据集。与 KITTI 相比,nuScenes 包含的对象注释多了 7 倍。_nuscense数据集

python mqtt publish_Python Paho MQTT:无法立即在函数中发布-程序员宅基地

文章浏览阅读535次。我正在实现一个程序,该程序可以侦听特定主题,并在ESP8266发布新消息时对此做出反应.从ESP8266收到新消息时,我的程序将触发回调并执行一系列任务.我在回调函数中发布了两条消息,回到了Arduino正在侦听的主题.但是,仅在函数退出后才发布消息.谢谢您的所有宝贵时间.我试图在回调函数中使用loop(1),超时为1秒.该程序将立即发布该消息,但似乎陷入了循环.有人可以给我一些指针如何在我的回调..._python 函数里面 mqtt调用publish方法 没有效果

win11怎么装回win10系统_安装win10后卸载win11-程序员宅基地

文章浏览阅读3.4w次,点赞16次,收藏81次。微软出来了win11预览版系统,很多网友给自己的电脑下载安装尝鲜,不过因为是测试版可能会有比较多bug,又只有英文,有些网友使用起来并不顺畅,因此想要将win11退回win10系统。那么win11怎么装回win10系统呢?今天小编就教下大家win11退回win10系统的方法。方法一:1、首先点击开始菜单,在其中找到“设置”2、在设置面板中,我们可以找到“更新和安全”3、在更新和安全中,找到点击左边栏的“恢复”4、恢复的右侧我们就可以看到“回退到上版本的win10”了。方法二:_安装win10后卸载win11

SQL Server菜鸟入门_sql server菜鸟教程-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏3次。数据定义_sql server菜鸟教程

Leetcode 数组(简单题)[1-1000题]_给定一个浮点数数组nums(逗号分隔)和一个浮点数目标值target(与数组空格分隔),请-程序员宅基地

文章浏览阅读1.9k次。1. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法一..._给定一个浮点数数组nums(逗号分隔)和一个浮点数目标值target(与数组空格分隔),请

推荐文章

热门文章

相关标签