Windows下Qt静态编译全解

2023-11-03

Windows下Qt静态编译全解

(2012-04-16 16:59:05)

转载

标签:

杂谈

分类: QT

Windows下Qt静态编译全解 (2010-09-08 13:42)

分类: QT


 

 

编译准备

下载NOKIA网站上的QT SDK,解压或安装到相关目录。
本文以QT 4.6.2为例,下载地址:http://get.qt.nokia.com/qt/source/qt-win-opensource-4.6.2-vs2008.exe

或者直接下载源码:http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.zip

 

下载后安装好的目录结构为(假设安装到D:\QT):
├─share
├─lib
├─bin
├─mingw
└─qt
    ├─translations(QT语言文件目录)
    ├─tools(QT相关工具源码目录)
    ├─src(源代码目录)
    ├─qmake(qmake源代码目录)
    ├─plugins(图形,数据库等插件目录)
    ├─mkspecs(平台配置文件)
    ├─lib(库文件)
    ├─include(头文件)
    ├─examples(示例程序)
    ├─doc(文档)
    ├─demos(演示程序)
    ├─config.tests
    ├─bin(命令行工具)
    └─qtc-debugging-helper

configure配置工具在qt目录,以下假设QTDIR=D:\QT\SDK\qt,编译前最好清空lib,demos,examples,docs四个目录,配置完成后在这几个目录下放一个空的Makefile文件,避免make时报错。


VS2005动态编译

1.设置VS2005的环境变量
2.设置目标平台
set QMAKESPEC=win32-msvc2005
3.进入QTDIR目录运行配置,生成Makefile文件
configure -platform win32-msvc2005 -release -opensource -shared -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support  -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista 
4.运行nmake /I /K(附带/I /K 选项可以避免出现错误时编译自动终止,用于跳过错误继续编译其它文件)

经过这样编译的Qt库不依赖mingwm10.dll,libgcc_s_dw2-1.dll,但依赖Qt库的Dll文件和微软的CRT运行时库,使用此Qt库编译Windows平台下的程序,发布时需带上用到的Qt链接库Dll文件和微软的CRT运行时库Dll文件。


VS2005静态编译
(VS2008编译同理,启动相应的命令行,设置相应的目标平台,修改相应的配置文件)
1.设置VS2005的环境变量
2.设置目标平台
set QMAKESPEC=win32-msvc2005
3.修改mkspecs/win32-msvc2005目录下的配置文件qmake.conf
将下面两行:
QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CFLAGS_DEBUG      = -Zi -MDd
修改为:
QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_DEBUG      = -Zi -MTd
(D是指dynamic,T是指static,d是指debug)
4.进入QTDIR目录,运行配置,生成Makefile文件
set QMAKESPEC=win32-msvc2005
configure -platform win32-msvc2005 -release -no-exceptions -opensource -static -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support  -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista 
5.运行运行nmake /I /K

经过这样编译的Qt库不依赖于任何Dll文件(如微软的CRT运行时库),使用此Qt库编译Windows平台下的程序发布时不需要附带任何额外的Dll文件。


MinGW静态编译

1.设置MinGW的环境变量
2.设置目标平台
set QMAKESPEC=win32-g++
3.修改mkspecs/win32-g++目录下的配置文件qmake.conf
将下面一行:
QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
修改为:
QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
然后将下面一行:
QMAKE_LFLAGS_DLL        = -shared
修改为:
QMAKE_LFLAGS_DLL        = -static
4.QTDIR目录,运行配置,生成Makefile文件
set QMAKESPEC=win32-g++
configure -platform win32-g++ -debug-and-release -no-exceptions -opensource -static -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support  -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista 
5.运行运行mingw32-make -i -k(-i -k选项的含义与上面nmake的相同)

 经过这样编译的Qt库,不依赖任何Dll文件(如mingwm10.dll,libgcc_s_dw2-1.dll),使用此Qt库编译的Windows平台下的程序发布时不需要附带任何额外的Dll文件。

编译事项说明

编译完成后可以删除bin目录中所有不是当前编译日期的文件。

建议编译前移除examples和demos文件夹的所有文件,避免重编译这两个文件夹,加快编译速度。

另外,编译命令请根据自己的实际情况配置,上面我的配置是(以VS2005静态编译为例):
-platform win32-msvc2005 目标平台
-release 关闭调试信息
-no-exceptions 除去异常支持
-opensource 开源版
-static 创建静态库
-fast 快速配置,只生成Qt库文件及子目录的Makefile文件,其它的Makefile文件后面再使用qmake生成
-qt-sql-sqlite SQLite驱动支持
-plugin-sql-sqlite  SQLite链接插件支持
-no-qt3support  不编译Qt3兼容库
-qt-zlib zlib库
-qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg 图形格式插件库
-no-webkit 不编译webkit,此选项可极大加快编译速度,需要使用WebKit的可以删除此选项
-qt-style-windowsxp -qt-style-windowsvista 支持XP和Vista主题样式

注意:使用静态编译的程序通常较大,建议发布前使用UPX压缩,一般可以减少至少50%的大小。

 

以上过程参照http://blog.csdn.net/SysThink/archive/2010/05/15/5596060.aspx的工作。

 

在运行configure的时候,可能会遇到这样的问题:

Could not find mkspecs for your QMAKESPEC(win32-g++) after trying:
C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_cre
ate_more/Troll/4.5.0/qt\mkspecs
Error processing project file: C:/Qt/2009.01/qt/projects.pro
Qmake failed, return code 3

实际上Qt并不是装在C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.5.0/目录下的,但是无论怎么修改配置都是不对。然后我找到了一种解决办法:

mkdir C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\

junction C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.5.0 :\Programmation\2009.01

configure -release -static -fast -accessibility -no-qt3support -no-stl -no-phonon -no-scripttools -no-openssl -no-opengl

mingw32-make

 

解释一下:

这个就是创建configure需要的目录,然后从我们实际安装路径链接过去。

其中junction可以在http://www.qtforum.org/index.php?page=ExternalLink&url=http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx下载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows下Qt静态编译全解 的相关文章

  • Python开发工具PyCharm的web开发教程:创建并运行 Python 项目

    在你开始前 要确定以下两点 PyCharm下载 已完成 安装了 Python PyCharm官方正版下载 要开始使用PyCharm 让我们编写一个 Python 脚本 创建一个 Python 项目 1 如果您在欢迎屏幕上 请单击新建项目 如
  • 关于 “定义_sys_exit()以避免使用半主机模式”的问题

    今天编译一个STM32程序的时候 遇到了一个问题 编译通不过 定义 sys exit 以避免使用半主机模式 void sys exit int x x x 输出的错误信息是 SYSTEM usart usart c 41 error 260
  • MySQL第二讲 MySQL主从架构搭建

    主从架构意义 通过搭建MySQL主从集群 可以缓解MySQL的数据存储以及访问的压力 1 数据安全 给主服务增加一个数据备份 基于这个目的 可以搭建主从架构 或者也可以基 于主从架构搭建互主的架构 2 读写分离 对于大部分的JAVA业务系统
  • python创意小作品-全国青少年创意编程与智能设计大赛Python创意编程比赛

    全国青少年创意编程与智能设计大赛Python创意编程比赛 一 作品类型 1 数字艺术 通过程序生成和展示视觉艺术 具备创意 美感和互动性 2 互动游戏 各种竞技类 探险类 角色扮演类 球类 棋牌类游戏等等 3 实用工具 有实用价值 能解决学
  • vscode js文件没有代码提示

    原因是 产生问题的原因可能是关闭了单纯的js文件中的javascript的提示 1 右下角设置 2 在上边输入 javascript suggest enabled 效果图
  • VBA:对Excel单元格进行合并操作

    Sub hb Dim n n 3 For i 3 To 18 If Range b i lt gt Range b i 1 Then Range b n b i Merge n i 1 End If Next End Sub
  • 自动化测试和性能测试的异同

    对于那些刚刚接触软件测试行业的小白来说 都会有这样一种错觉 觉得性能测试和自动化测试是差不多的 但是如果深入了解 会发现这两者的区分还是很大的 接下来我们就来详细了解一下自动化测试和性能测试的异同之处 首先两者都有一个共同点 那就是在处理脚
  • mysql 投影,MySQL —— select

    select语句使用详解 select语句是基础操作中比较复杂的部分 我们单拿出来详细解析一下 还是以上一篇文章里的student表为例 select from student 查询student表中所有记录 create table st
  • Clion 使用自己编写的 Makefile编译

    Clion 目前支持使用 cmake 来编译代码 如果习惯了自己写 makefile 那么还需要通过 cmake 的 add custom target 来调用make 命令来实现编译了 参考了http stackoverflow com
  • LoadRunner参数化详解

    LoadRunner参数化详解 距离上次使用loadrunner 已经有一年多的时间了 初做测试时在项目中用过 后面项目中用不到 自己把重点放在了工具之外的东西上 认为性能测试不仅仅是会用工具 最近又想有一把好的利器毕竟可以帮助自己更好的完
  • 明天全国哀悼日,小程序只需三行代码秒变黑白

    明天全国哀悼日 小程序只需三行代码秒变黑白 打开你的 app wxss 文件 在第一行加上 page filter grayscale 100
  • postgresql Insert插入的几个报错

    postgresql Insert插入的几个报错 1 org postgresql util PSQLException 未设定参数值 2 的内容 2 postgresql column reference is ambigious 参考
  • GD32的ADC模块简介

    ADC模块简介 驱动板所使用的主控芯片为GD32C103CB 该芯片总共有2个ADC单元 即ADC0 ADC1 因为驱动板上使用的是LQFP48封装 所以该芯片的每个ADC单元只有10个外部模拟输入通道 并且共用相同的GPIO口 这10个外
  • 第1关:用Bison构建逆波兰计算器

    任务描述 相信大家通过flex的实验已经掌握了如何构建一个词法分析器 但是为了创建一个完整的编译程序 我们还需要一个语法分析器 同样的 我们可以使用现有的工具来节省开发的时间 也就是Unix下的YACC和GNU Linux下的Bison 相
  • AV1:为互联网提供开放、免费的视频编解码工具

    从学术研究到进入工业界 Zoe Liu一直在算法和音视频领域 目前在谷歌编解码团队为编解码器AV1做开发支持 Zoe畅谈了评定编解码器的标准 以及AV1的最新进度 本文是 下一代编码器 系列采访之一 欢迎自荐或推荐技术人加入 下一代编码器
  • 《我的眼睛--图灵识别》第九章:训练:制作识别字库

    我的眼睛 图灵识别 第九章 训练 制作识别字库 为什么要做字库 做字库就好比我们要上学念书一样 学习储备知识 这样才能认识文字不是吗 好好学习 1 像素点阵 什么是点阵 对于一个屏幕显示屏来说 就是利用无数个点组成的矩形平面 通过设置每个点
  • vue项目 Network: unavailable的解决办法

    vue项目 Network unavailable 问题 问题描述 使用vue3 0 的版本 在自己电脑上开发项目 启用项目后 只能用localhost访问项目 十分不便 不能使用手机浏览器或其他人访问 如下图所示 解决方案 在devSer
  • The reference to entity "useSSL" must end with the ';' delimiter.

    在搭建测试环境的hive的时候 发现启动的时候 经常报以下警告信息 Thu May 14 09 52 26 CST 2020 WARN Establishing SSL connection without server s identit
  • 51单片机ROM和RAM

    文章目录 TOC 文章目录 一 51单片机的程序存储器结构 1 内部结构 2 程序存储器的7个特殊地址 二 51单片机的数据存储器 1 片内数据存储器 2 片外数据存储器 提示 以下是本篇文章正文内容 下面案例可供参考 一 51单片机的程序
  • Python 控制舵机

    原理 UNO R3中写入控制舵机转动度数的程序 该程序一直检测 serial是否又数据 有则操作舵机 python程序负责向 serial 写入数据 并可以通过serial读取 舵机角度的信息 1 硬件连接 说明 示例中的信号线接的是10号

随机推荐

  • 关于 dell 戴尔 工作站 首次开机 start pxe over ipv4 以及 关闭PXE后还没有网络的 新款 bios 设置

    当你关闭bios后进去了发现木有网卡 或者拔掉网线进去电脑后插上网线木有网卡 新款bios设置截图 三个选项分别是 Disable 关闭 The internal LAN is off and not visibleto the opera
  • 人脸识别OPENCV

    usr bin python coding UTF 8 文件名 test py import os fb open a txt w with open at txt r as alc i 0 for line in alc print li
  • 快速排序python实现

    简述过程 1 设置标准值为列表第一个prime lst 0 2 设置指针cur1 和 cur2 初始位置的索引分别为0和len lst 1 cur1和cur2描述的是索引index 指针2 从列表后方向前遍历 找到比标准值小或者和标准值相等
  • select 中的union 和union all用法

    UNION The UNION command is used to select related information from two tables much like the JOIN command However when us
  • Linux 使用 Systemd 管理进程服务(新手必看)

    systemd 介绍 systemd是目前Linux系统上主要的系统守护进程管理工具 由于init一方面对于进程的管理是串行化的 容易出现阻塞情况 另一方面init也仅仅是执行启动脚本 并不能对服务本身进行更多的管理 所以从CentOS 7
  • python语言结构_Python语言学习之结构的用法

    Python语言的三种结构 顺序结构 将一条一条语句按顺序执行 分支结构 语句执行的时候 有不同的分支来执行 循环结构 当在执行语句时 有些是重复性的代码 即可使用循环进行操作 分支结构 if else 语句 if elif else 语句
  • openswan安装配置手册(RSA)

    下载地址 www openswan org download 下载源码包 openswan 2 6 32 tar gz 64 位CentOS 5 8 系统环境 1 解压编译安装openswan tar xvf openswan 2 6 32
  • 访问zabbix web页面格式混乱不能正常显示的问题

    通过搜索 找到了一个网友的一篇文章 https blog csdn net weixin 45607094 article details 100542394 修改下面的配置文件 把location 的注释去掉 原因是 一些静态文件没有进行
  • JSP中 page指令的应用

    JSP指令中 Page language 值只能 java extends 一定要继承Servlet session true JSP页面内可以直接使用session对象 import 用来导包 buffer和autoFlush 设置缓冲区
  • 浏览器插件crx文件怎么导入到谷歌浏览器

    浏览器插件crx文件怎么导入到谷歌浏览器 作为开发人员 我们少不了和浏览器插件打交道 比如Fehelper插件 我们下载的插件格式基本都是crx为后缀名的 下载好了之后 我们可以直接拖动插件文件到浏览器 会自动添加 然后就可以使用了 但是有
  • Python解离散数学

    离散数学 离散数学是对可数的 不同的或独立的数学结构的研究 一个很好的例子是像素 从手机到电脑显示器再到电视机 现代屏幕由数百万个称为像素的小点组成 这些点排列成网格 每个像素根据设备的命令以指定的颜色亮起 但每个像素只能显示有限数量的颜色
  • 频繁分配释放内存导致的性能问题的分析

    频繁分配释放内存导致的性能问题的分析 现象 1 压力测试过程中 发现被测对象性能不够理想 具体表现为 进程的系统态CPU消耗20 用户态CPU消耗10 系统idle大约70 2 用ps o majflt minflt C program命令
  • map容器的四种插入元素方法

    插入元素 四种插入方法比较 void display map
  • C++程序翻译成C语言程序

    C 程序翻译成C语言程序 C 语言是在C语言的基础上发展过来的 第一个C 的编译器实际上是将C 程序翻译成C原因程序 再通过C语言编译器进行编译 然而C语言中没有类的概念 只有结构 而且函数还是全局函数 没有类成员函数 在翻译时 将clas
  • 【华为OD机试】连续字母长度(C++ Python Java)2023 B卷

    题目描述 给定一个字符串 只包含大写字母 求在包含同一个字母的子串中 长度第k长的子串的长度 相同字母只取最长的那个子串 若子串中只包含同一个字母的子串数小于k 则输出 1 输入描述 第一行有一个字符串 1 lt 长度 lt 100 只包含
  • Git提示 fatal: Not a git repository 错误解决方法

    fatal Not a git repository or any of the parent directories git 提示说没有 git这样一个目录 解决办法如下 git init 然后在进行操作就可以了
  • 大学操作系统原理课程笔记

    进程的概念 定义 可并发执行的程序 在一个数据集合上运行的过程 申请 拥有资源 调度 线程 程序 静态概念 是指令和数据的集合 可长期存储 进程与程序对应关系 a 一个程序可以对应一个进程或多个进程 b 一个进程可以对应一个程序 或者一段程
  • ajax.beginform insertionmode,MVC Ajax.BeginForm InsertionMode

    的JavaScript引用的文件 CSHTML页 using Ajax BeginForm new AjaxOptions UpdateTargetId result LoadingElementId progress InsertionM
  • 【C#学习笔记】保存文件

    using System using System Collections Generic using System ComponentModel using System Data using System Drawing using S
  • Windows下Qt静态编译全解

    Windows下Qt静态编译全解 2012 04 16 16 59 05 转载 标签 杂谈 分类 QT Windows下Qt静态编译全解 2010 09 08 13 42 分类 QT 编译准备 下载NOKIA网站上的QT SDK 解压或安装