VS2010编译Qt5.4.0静态库
http://www.kavenblog.com/?p=375
1、Qt的跨平台十分优秀,但是在Windows上是还是会有许多问题,其中之一就是动态链接库的问题,Qt程序的发布必须带一个体积不小的DLL库,这十分不方便。当然,如果是程序员之间会比较方便,如果别人的机子也安装了Qt,并且设置了环境变量,那么也可以不将公共的DLL附在发布的程序中。但是,这样显然还是不方便。
2、静态链接库很好的解决了这一个问题,下面就来详细叙述如何编译Qt5.4.0的静态库。
3、参考链接:http://blog.csdn.net/wwkaven/article/details/37668859
4、下载Qt源码:
![]()
5、安装Python
https://www.python.org/downloads/
https://www.python.org/ftp/python/3.4.3/python-3.4.3.msi
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
6、解压Qt源码:
![]()
![]()
7、进入这个文件夹:qt-everywhere-opensource-src-5.4.0\qtbase\mkspecs
![]()
8、进入这个文件夹:qt-everywhere-opensource-src-5.4.0\qtbase\mkspecs\win32-msvc2010,里面有两个文件:
![]()
9、打开qmake.conf,修改内容并保存,如下:
原始内容如下(注意红色部分):
#
# qmake configuration for win32-msvc2010
#
# Written for Microsoft Visual C++ 2010
#
MAKEFILE_GENERATOR = MSBUILD
QMAKE_PLATFORM = win32
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
DEFINES += UNICODE WIN32
MSVC_VER = 10.0
QMAKE_COMPILER_DEFINES += _MSC_VER=1600 _WIN32
contains(QMAKE_TARGET.arch, x86_64) {
DEFINES += WIN64
QMAKE_COMPILER_DEFINES += _WIN64
}
QMAKE_COMPILER = msvc
QMAKE_CC = cl
QMAKE_LEX = flex
QMAKE_LEXFLAGS =
QMAKE_YACC = byacc
QMAKE_YACCFLAGS = -d
QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t
QMAKE_CFLAGS_WARN_ON = -W3
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
QMAKE_CFLAGS_MP = -MP
QMAKE_CFLAGS_SSE2 = -arch:SSE2
QMAKE_CFLAGS_SSE3 = -arch:SSE2
QMAKE_CFLAGS_SSSE3 = -arch:SSE2
QMAKE_CFLAGS_SSE4_1 = -arch:SSE2
QMAKE_CFLAGS_SSE4_2 = -arch:SSE2
QMAKE_CFLAGS_AVX = -arch:AVX
QMAKE_CFLAGS_AVX2 = -arch:AVX
QMAKE_CXX = $$QMAKE_CC
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS_MP = $$QMAKE_CFLAGS_MP
QMAKE_CXXFLAGS_STL_ON = -EHsc
QMAKE_CXXFLAGS_STL_OFF =
QMAKE_CXXFLAGS_RTTI_ON = -GR
QMAKE_CXXFLAGS_RTTI_OFF =
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -EHsc
QMAKE_CXXFLAGS_EXCEPTIONS_OFF =
QMAKE_INCDIR =
QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -Fo$obj $src
QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -Fo$@ $<
QMAKE_RUN_CC_IMP_BATCH = $(CC) -c $(CFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$obj $src
QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $<
QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF /INCREMENTAL:NO
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS
QMAKE_LFLAGS_EXE = \"/MANIFESTDEPENDENCY:type=\’win32\’ name=\’Microsoft.Windows.Common-Controls\’ version=\’6.0.0.0\’ publicKeyToken=\’6595b64144ccf1df\’ language=\’*\’ processorArchitecture=\’*\’\"
QMAKE_LFLAGS_DLL = /DLL
QMAKE_LFLAGS_LTCG = /LTCG
QMAKE_EXTENSION_STATICLIB = lib
QMAKE_LIBS_CORE = kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib
QMAKE_LIBS_GUI = gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib ws2_32.lib ole32.lib user32.lib advapi32.lib
QMAKE_LIBS_NETWORK = ws2_32.lib
QMAKE_LIBS_OPENGL = glu32.lib opengl32.lib gdi32.lib user32.lib
QMAKE_LIBS_OPENGL_ES2 = libEGL.lib libGLESv2.lib gdi32.lib user32.lib
QMAKE_LIBS_OPENGL_ES2_DEBUG = libEGLd.lib libGLESv2d.lib gdi32.lib user32.lib
QMAKE_LIBS_COMPAT = advapi32.lib shell32.lib comdlg32.lib user32.lib gdi32.lib ws2_32.lib
QMAKE_LIBS_QT_ENTRY = -lqtmain
QMAKE_IDL = midl
QMAKE_LIB = lib /NOLOGO
QMAKE_RC = rc
include(../common/shell-win32.conf)
VCPROJ_EXTENSION = .vcxproj
VCSOLUTION_EXTENSION = .sln
VCPROJ_KEYWORD = Qt4VSv1.0
load(qt_config)
修改红色部分,将MD(动态)改为MT(静态)
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
改为
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
保存文件
10、以管理员身份打开VS2010的命令提示工具:
![]()
![]()
输入python,查看Python的状态:
![]()
如果是这样,需要设动设置Python的环境变量:
![]()
set PATH=%PATH%;C:\Python34
按下“Ctrl+z”,再回车,退出Python
![]()
CD至Qt源码的解压目录:
![]()
11、关键步骤,Configure
输入:
configure -mp -confirm-license -opensource -platform win32-msvc2010 -debug-and-release -static -prefix "D:\QT_Static\qt-static-5.4.0" -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtwebkit
![]()
回车:
![]()
一会之后:
![]()
12、执行nmake
![]()
回车
![]()
接下去就是漫长的编译过程了, 等待中。。。。。。
![]()
编译完成
![]()
编译完后的文件夹大小:
![]()
13、执行nmake install
![]()
完成
![]()
安装目录:
![]()
![]()
14、配置静态库
![]()
![]()
![]()
![]()
![]()
![]()
发现有一个警告,暂时忽略:
![]()
15、创建测试项目
选择静态编译器:
![]()
以下是编译输出:
13:44:17: 为项目StaticTest执行步骤 …
13:44:17: 正在启动 "D:\QT_Static\qt-static-5.4.0\bin\qmake.exe" D:\Documents\QT\StaticTest\StaticTest.pro -r -spec win32-msvc2010
13:44:18: 进程"D:\QT_Static\qt-static-5.4.0\bin\qmake.exe"正常退出。
13:44:18: 正在启动 "C:\Qt\Qt5.4.0\Tools\QtCreator\bin\jom.exe"
C:\Qt\Qt5.4.0\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
D:\QT_Static\qt-static-5.4.0\bin\uic.exe ..\StaticTest\dialog.ui -o ui_dialog.h
cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MTd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\StaticTest.pdb -DUNICODE -DWIN32 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I"..\..\..\QT_Static\qt-static-5.4.0\include" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtWidgets" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtGui" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtCore" -I"debug" -I"." -I"." -I"..\..\..\QT_Static\qt-static-5.4.0\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\Kaven\AppData\Local\Temp\main.obj.9692.0.jom
main.cpp
cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MTd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\StaticTest.pdb -DUNICODE -DWIN32 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I"..\..\..\QT_Static\qt-static-5.4.0\include" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtWidgets" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtGui" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtCore" -I"debug" -I"." -I"." -I"..\..\..\QT_Static\qt-static-5.4.0\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\Kaven\AppData\Local\Temp\statictest_plugin_import.obj.9692.15.jom
statictest_plugin_import.cpp
D:\QT_Static\qt-static-5.4.0\bin\moc.exe -DUNICODE -DWIN32 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D_MSC_VER=1600 -D_WIN32 -ID:/QT_Static/qt-static-5.4.0/mkspecs/win32-msvc2010 -ID:/Documents/QT/StaticTest -ID:/QT_Static/qt-static-5.4.0/include -ID:/QT_Static/qt-static-5.4.0/include/QtWidgets -ID:/QT_Static/qt-static-5.4.0/include/QtGui -ID:/QT_Static/qt-static-5.4.0/include/QtCore -I. ..\StaticTest\dialog.h -o debug\moc_dialog.cpp
cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MTd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\StaticTest.pdb -DUNICODE -DWIN32 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I"..\..\..\QT_Static\qt-static-5.4.0\include" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtWidgets" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtGui" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtCore" -I"debug" -I"." -I"." -I"..\..\..\QT_Static\qt-static-5.4.0\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\Kaven\AppData\Local\Temp\dialog.obj.9692.343.jom
dialog.cpp
cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MTd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\StaticTest.pdb -DUNICODE -DWIN32 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I"..\..\..\QT_Static\qt-static-5.4.0\include" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtWidgets" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtGui" -I"..\..\..\QT_Static\qt-static-5.4.0\include\QtCore" -I"debug" -I"." -I"." -I"..\..\..\QT_Static\qt-static-5.4.0\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\Kaven\AppData\Local\Temp\moc_dialog.obj.9692.609.jom
moc_dialog.cpp
echo 1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ "debug\\StaticTest.exe.embed.manifest">debug\StaticTest.exe_manifest.rc
if not exist debug\StaticTest.exe if exist debug\StaticTest.exe.embed.manifest del debug\StaticTest.exe.embed.manifest
if exist debug\StaticTest.exe.embed.manifest copy /Y debug\StaticTest.exe.embed.manifest debug\StaticTest.exe_manifest.bak
link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type=’win32′ name=’Microsoft.Windows.Common-Controls’ version=’6.0.0.0′ publicKeyToken=’6595b64144ccf1df’ language=’*’ processorArchitecture=’*’" /MANIFEST /MANIFESTFILE:debug\StaticTest.exe.embed.manifest /OUT:debug\StaticTest.exe @C:\Users\Kaven\AppData\Local\Temp\StaticTest.exe.9692.2297.jom
正在创建库 debug\StaticTest.lib 和对象 debug\StaticTest.exp
if exist debug\StaticTest.exe_manifest.bak fc /b debug\StaticTest.exe.embed.manifest debug\StaticTest.exe_manifest.bak >NUL || del debug\StaticTest.exe_manifest.bak
if not exist debug\StaticTest.exe_manifest.bak rc.exe /fodebug\StaticTest.exe_manifest.res debug\StaticTest.exe_manifest.rc
Microsoft (R) Windows (R) Resource Compiler Version 6.1.7600.16385
Copyright (C) Microsoft Corporation. All rights reserved.
if not exist debug\StaticTest.exe_manifest.bak link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type=’win32′ name=’Microsoft.Windows.Common-Controls’ version=’6.0.0.0′ publicKeyToken=’6595b64144ccf1df’ language=’*’ processorArchitecture=’*’" /MANIFEST /MANIFESTFILE:debug\StaticTest.exe.embed.manifest /OUT:debug\StaticTest.exe @C:\Users\Kaven\AppData\Local\Temp\StaticTest.exe.9692.2312.jom
正在创建库 debug\StaticTest.lib 和对象 debug\StaticTest.exp
if exist debug\StaticTest.exe_manifest.bak del debug\StaticTest.exe_manifest.bak
13:44:42: 进程"C:\Qt\Qt5.4.0\Tools\QtCreator\bin\jom.exe"正常退出。
13:44:42: Elapsed time: 00:26.
运行:
![]()
看一下生成的程序信息:
![]()
16、用VS打开项目
![]()
![]()
VS编译项目:
编译输出如下:
1>—— 已启动生成: 项目: StaticTest, 配置: Debug Win32 ——
1>生成启动时间为 2015/3/13 13:53:15。
1>PrepareForBuild:
1> 正在创建目录“debug\”。
1>InitializeBuildStatus:
1> 正在创建“Win32\Debug\StaticTest.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
1>CustomBuild:
1> Moc’ing dialog.h…
1> Uic’ing dialog.ui…
1>ClCompile:
1> dialog.cpp
1> moc_dialog.cpp
1> main.cpp
1> 正在生成代码…
1>Link:
1> StaticTest.vcxproj -> D:\Documents\QT\StaticTest\debug\StaticTest.exe
1>FinalizeBuildStatus:
1> 正在删除文件“Win32\Debug\StaticTest.unsuccessfulbuild”。
1> 正在对“Win32\Debug\StaticTest.lastbuildstate”执行 Touch 任务。
1>
1>生成成功。
1>
1>已用时间 00:00:05.15
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
注意:此时用VS生成的项目还是用的动态库,因为未将静态库添加到VS中。
同上方法,将编译好的静态库也添加到VS设置中的Qt版本中:
![]()
![]()
![]()
然后,右键项目,Qt Project Settings
![]()
![]()
编译:
1>—— 已启动生成: 项目: StaticTest, 配置: Debug Win32 ——
1>生成启动时间为 2015/3/13 15:11:27。
1>PrepareForBuild:
1> 正在创建目录“debug\”。
1>InitializeBuildStatus:
1> 正在创建“Win32\Debug\StaticTest.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
1>CustomBuild:
1> Moc’ing dialog.h…
1> Uic’ing dialog.ui…
1>ClCompile:
1> dialog.cpp
1> moc_dialog.cpp
1> main.cpp
1> statictest_plugin_import.cpp
1> 正在生成代码…
1>Link:
1> 正在创建库 debug\\StaticTest.lib 和对象 debug\\StaticTest.exp
1> StaticTest.vcxproj -> D:\Documents\QT\StaticTest\debug\StaticTest.exe
1>FinalizeBuildStatus:
1> 正在删除文件“Win32\Debug\StaticTest.unsuccessfulbuild”。
1> 正在对“Win32\Debug\StaticTest.lastbuildstate”执行 Touch 任务。
1>
1>生成成功。
1>
1>已用时间 00:00:14.37
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
![]()
OK,本篇结束。
VS2010编译Qt5.4.0静态库的更多相关文章
- linux下编译qt5.6.0静态库——configure配置
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- VS2013编译Qt5.6.0静态库
获取qt5.6.0源码包 直接去www.qt.io下载就好了,这里就不详细说了. 这里是我已经编译好的** 链接:http://pan.baidu.com/s/1pLb6wVT 密码: ak7y ** ...
- VS2013编译Qt5.6.0静态库(乌合之众)
获取qt5.6.0源码包 直接去www.qt.io下载就好了,这里就不详细说了. 这里是我已经编译好的** 链接:http://pan.baidu.com/s/1pLb6wVT 密码: ak7y ** ...
- VS2013编译Qt5.6.0静态库,并提供了百度云下载(乌合之众)good
获取qt5.6.0源码包 直接去www.qt.io下载就好了,这里就不详细说了. 这里是我已经编译好的** 链接:http://pan.baidu.com/s/1pLb6wVT 密码: ak7y ** ...
- VS2015编译Qt5.7.0生成支持XP的静态库(很不错)
一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...
- 静态编译 Qt5.7.0 (含 openssl 支持)
关于Qt静态便宜的环境等,请先参见 Win10 + VS2015 下编译 Qt5.6.0 . 首先编译 openssl .我这里用的版本是 openssl 1.0.2j (新的1.1版本的便宜稍有不同 ...
- Win10 + VS2015 下编译 Qt5.6.0
近期由于另外一个项目需要用 vs2015 ,于是把 Qt 也升级到了 5.6.0 .由于项目需要兼容 Windows xp ,所以需要自己编译 Qt .这里大致整理一下编译的过程. 安装 Active ...
随机推荐
- bfs 胜利大逃亡
http://acm.hdu.edu.cn/showproblem.php?pid=1253 题目: Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一 ...
- PHP 启动 cURL模块以及启动失败的解决方案
配置方法: php_curl.dll libeay32.dll ssleay32.dll php5ts.dll 复制到 %windir%/system32 以及php 目录的ext目录 下 并且找到p ...
- [backbone]backbone.js
学习文档: 开始学习 Backbone http://www.ibm.com/developerworks/cn/web/wa-backbonejs/
- hduoj----1142A Walk Through the Forest(记忆化搜索+最短路)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- Java 字典排序
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import org.ju ...
- Objective-C:Foundation框架-常用类-NSDictionary
与NSString.NSArray一样,NSDictionary是不可变的,其对应可变类型为NSMutableDictionary.其用法如下: #import <Foundation/Foun ...
- 读《程序员的SQL金典》[1]--基础数据检索
前言 <程序员的SQL金典>这本书是杨中科老师的,拜读了一下,简单做了读书笔记供以后翻阅.仅供学习分享,要想细读的话推荐购买原版呀! 这次读书的时候用了新的办法把看书计划进行了量化,虽然简 ...
- Oracle - PL/SQL Commands
第一章:日志管理 1.forcing log switches sql> alter system switch logfile; 2.forcing checkpoints sql> a ...
- 转载python2进制打包相关
Python模块——struct(字节流,组包拆包实现) http://www.linuxidc.com/Linux/2014-02/97158.htm [日期:2014-02-24] 来源:Linu ...
- [转]网络时间的那些事及 ntpq 详解
Gentoo(也许其他发行版也是?)中 "ntpq -p" 的 man page 只有简短的描述:“打印出该服务器已知的节点列表和它们的状态概要信息.” 我还没见到关于这个命令的说 ...