要想實現標題的目的,qt5.7及其以後的版本——別試了。網上有5.7的方法,但是5.7不是LTS(長期技術支持版)啊。python
5.6到2017年末還在出改進版5.6.3,而5.7就銷聲匿跡了啊。mysql
我嘗試5.9這個同5.6同樣的長期版,靜態編譯卻是能夠,放xp裏運行不了了。qt本身也說5.7以後就不支持xp了。git
【我是win10x64的虛擬機】sql
1.去QT官網或者鏡像網站下載everything。好比說北京理工的http://mirror.bit.edu.cn/qtproject/official_releases/qt/5.6/5.6.3/single/shell
2.裝python2.7.* 我裝的是當時官網的2.7.13 數據庫
3.裝ruby 我裝的是ruby 1.9.2p0 (2010-08-18) [i386-mingw32]編程
4.裝perl 我裝的是http://www.perl.org/上的5.24.3json
上述軟件安裝時會有英文提示問你是否加入環境變量等等,注意觀察。勾選加入!windows
裝VS2015 update3 切記是update3!很大的一個安裝包,7G多的一個ISO。(VS2017貌似就不理睬x86了,專心x64了。)api
還要裝一個windows software development Kit的東西,這是一個全家桶,沒必要都裝,光裝裏面那個什麼SDK就行。
5.6.3靜態編譯方法 |
1.建個QtStatic目錄,其下再創建三個子目錄BuildScript、src、vs2015static
(BuildScript用來存放安裝腳本和編譯中間文件;src用來存everything解壓出來的源碼;另外一個目錄就是存最終成果了。mingw編譯器神慢,在win下仍是用ms的vs自帶的編譯器cl吧。)
2.在BuildScript目錄下創建qt-build.bat文件,內容以下:
REM ********** Initialize env for msvc 2015 cl compiler ********** SET PATH=C:\Windows;C:\Windows\system32 REM Set up \Microsoft Visual Studio 2015, where <arch> is amd64, x86, etc. CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 REM ********** Update include & lib to support xp win sdk 7.1A ********** SET PATH="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin";%PATH% SET INCLUDE="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include";%INCLUDE% SET LIB="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib";%LIB% SET CL=/D_USING_V110_SDK71_;%CL% REM ********** 3rd party build tools binaries: ruby, perl, python ********** SET PATH=C:\Perl64\bin;C:\Perl64\site\bin;C:\Python27\;C:\Python27\Scripts;C:\Ruby192\bin;%PATH% REM ********** Set up qt source env ********** SET _ROOT=C:\QtStatic\Qt5.6.3\src SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% REM Uncomment the below line when using a git checkout of the source repository REM SET PATH=%_ROOT%\qtrepotools\bin;%PATH% SET QMAKESPEC=win32-msvc2015 SET _ROOT= REM Generate makefile ../src/configure.bat -confirm-license -opensource -platform win32-msvc2015 -release -static -target xp -prefix C:\QtStatic\Qt5.6.3\vs2015static -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -plugin-sql-oci -plugin-sql-mysql -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -no-directwrite -mp
上文中涉及路徑的你仔細調整,設置成你本身機器的真實狀況。我須要鏈接oracle和mysql數據庫,你視狀況自行增刪最後一段相關開關。最後一段這裏,qt5.6和5.9關於數據庫這塊非常不一樣,其餘細節也有差別。
3.修改C:\QtStatic\Qt5.6.3\src\qtbase\mkspecs\common\msvc-desktop.conf以下:
# # qmake configuration for Microsoft Visual Studio C/C++ Compiler # This mkspec is used for all win32-msvcXXXX specs # isEmpty(MSC_VER)|isEmpty(MSVC_VER): error("Source mkspec must set both MSC_VER and MSVC_VER.") # # Baseline: Visual Studio 2005 (8.0), VC++ 14.0 # include(angle.conf) MAKEFILE_GENERATOR = MSVC.NET QMAKE_PLATFORM = win32 QMAKE_COMPILER = msvc CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe DEFINES += UNICODE WIN32 QMAKE_COMPILER_DEFINES += _MSC_VER=$$MSC_VER _WIN32 contains(QMAKE_TARGET.arch, x86_64) { DEFINES += WIN64 QMAKE_COMPILER_DEFINES += _WIN64 } QMAKE_CC = cl QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = bison -y QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = -nologo -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 QMAKE_CFLAGS_RELEASE = -O2 -MT QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi QMAKE_CFLAGS_DEBUG = -Zi -MTd QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_LTCG = -GL 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_CXX = $$QMAKE_CC QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189 -w44996 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_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_PREFIX_SHLIB = QMAKE_EXTENSION_SHLIB = dll QMAKE_PREFIX_STATICLIB = 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_NAME}.lib $${LIBGLESV2_NAME}.lib gdi32.lib user32.lib QMAKE_LIBS_OPENGL_ES2_DEBUG = $${LIBEGL_NAME}d.lib $${LIBGLESV2_NAME}d.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 VCPROJ_EXTENSION = .vcproj VCSOLUTION_EXTENSION = .sln VCPROJ_KEYWORD = Qt4VSv1.0 include(msvc-base.conf) unset(MSC_VER)
4.修改C:\QtStatic\Qt5.6.3\src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro等數據庫配置文件以下:
TARGET = qsqlmysql SOURCES = main.cpp OTHER_FILES += mysql.json include(../../../sql/drivers/mysql/qsql_mysql.pri) PLUGIN_CLASS_NAME = QMYSQLDriverPlugin include(../qsqldriverbase.pri) INCLUDEPATH += "C:/MySQL/include" LIBPATH += "C:/MySQL/lib" QMAKE_LIBS += -llibmysql -lmysqlclient
TARGET = qsqloci SOURCES = main.cpp OTHER_FILES += oci.json include(../../../sql/drivers/oci/qsql_oci.pri) PLUGIN_CLASS_NAME = QOCIDriverPlugin include(../qsqldriverbase.pri) INCLUDEPATH += "C:/instantclient_11_2/sdk/include" LIBPATH += "C:/instantclient_11_2/sdk/lib/msvc" QMAKE_LIBS += -loci -lociw32 -loraocci11
TARGET = qsqlodbc SOURCES = main.cpp OTHER_FILES += odbc.json include(../../../sql/drivers/odbc/qsql_odbc.pri) PLUGIN_CLASS_NAME = QODBCDriverPlugin include(../qsqldriverbase.pri) INCLUDEPATH += "C:/Program Files (x86)/Windows Kits/8.1/Include/um" LIBPATH += "C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x86" QMAKE_LIBS += odbc32.lib odbcbcp.lib odbccp32.lib
幾個配置文件修改完畢,就是漫長的編譯等待工做了。後續操做,參考《VS2015編譯Qt5.7.0生成支持XP的靜態庫》。
編程的時候參考《使用Qt5.7.0 VS2015版本生成兼容XP的可執行程序》。
完畢。
5.9.4靜態編譯方法 |
1.建個QtStatic目錄,其下再創建三個子目錄BuildScript、src、vs2015static
(BuildScript用來存放安裝腳本和編譯中間文件;src用來存everything解壓出來的源碼;另外一個目錄就是存最終成果了。mingw編譯器神慢,在win下仍是用ms的vs自帶的編譯器cl吧。)
2.在BuildScript目錄下創建qt-build.bat文件,內容以下:
REM ********** Initialize env for msvc 2015 cl compiler ********** SET PATH=C:\Windows;C:\Windows\system32 REM Set up \Microsoft Visual Studio 2015, where <arch> is amd64, x86, etc. CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 REM ********** Update include & lib to support xp win sdk 7.1A ********** SET PATH="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin";%PATH% SET INCLUDE="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include";%INCLUDE% SET LIB="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib";%LIB% SET CL=/D_USING_V110_SDK71_;%CL% REM ********** 3rd party build tools binaries: ruby, perl, python ********** SET PATH=C:\Perl64\bin;C:\Perl64\site\bin;C:\Python27\;C:\Python27\Scripts;C:\Ruby192\bin;%PATH% REM ********** Set up qt source env ********** SET _ROOT=C:\QtStatic\Qt5.9.4\src SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% REM Uncomment the below line when using a git checkout of the source repository REM SET PATH=%_ROOT%\qtrepotools\bin;%PATH% REM SET QMAKESPEC=win32-msvc SET _ROOT= REM Generate makefile ../src/configure.bat -confirm-license -opensource -platform win32-msvc2015 -release -static -prefix C:\QtStatic\Qt5.9.4\vs2015static -continue -I"C:\instantclient_11_2\sdk\include" -L"C:\instantclient_11_2\sdk\lib\msvc" -I"C:\MySQL\include" -L"C:\MySQL\lib" -sql-sqlite -sql-odbc -sql-oci -sql-mysql -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -no-directwrite -mp
三、msvc-desktop.conf修改
# # This file is used as a basis for the following compilers: # # - Microsoft C/C++ Optimizing Compiler (all desktop versions) # - Intel C++ Compiler on Windows # - Clang-cl # # Baseline: # # - Visual Studio 2005 (8.0), VC++ 14.0 # # Version-specific settings go in msvc-version.conf (loaded by default_pre) # MAKEFILE_GENERATOR = MSVC.NET QMAKE_PLATFORM = win32 QMAKE_COMPILER = msvc CONFIG += incremental flat debug_and_release debug_and_release_target precompile_header autogen_precompile_source embed_manifest_dll embed_manifest_exe DEFINES += UNICODE _UNICODE WIN32 _USING_V110_SDK71_ QMAKE_COMPILER_DEFINES += _WIN32 contains(QMAKE_TARGET.arch, x86_64) { DEFINES += WIN64 QMAKE_COMPILER_DEFINES += _WIN64 } QMAKE_CFLAGS_OPTIMIZE = -O2 QMAKE_CFLAGS_OPTIMIZE_SIZE = -O1 QMAKE_CC = cl QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = bison -y QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = -nologo -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -MT -Zi QMAKE_CFLAGS_DEBUG = -Zi -MTd QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_LTCG = -GL contains(QMAKE_TARGET.arch, x86_64) { # SSE2 is mandatory on 64-bit mode, so skip the option. It triggers: # cl : Command line warning D9002 : ignoring unknown option '-arch:SSE2' QMAKE_CFLAGS_SSE2 = } else { QMAKE_CFLAGS_SSE2 = -arch:SSE2 } QMAKE_CFLAGS_SSE3 = $$QMAKE_CFLAGS_SSE2 QMAKE_CFLAGS_SSSE3 = $$QMAKE_CFLAGS_SSE2 QMAKE_CFLAGS_SSE4_1 = $$QMAKE_CFLAGS_SSE2 QMAKE_CFLAGS_SSE4_2 = $$QMAKE_CFLAGS_SSE2 QMAKE_CXX = $$QMAKE_CC QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189 -w44996 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_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,5.01 QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01 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_PREFIX_SHLIB = QMAKE_EXTENSION_SHLIB = dll QMAKE_PREFIX_STATICLIB = QMAKE_EXTENSION_STATICLIB = 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 = gdi32.lib user32.lib QMAKE_LIBS_OPENGL_ES2_DEBUG = 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 /NOLOGO QMAKE_LIB = lib /NOLOGO QMAKE_RC = rc /NOLOGO VCPROJ_EXTENSION = .vcproj VCSOLUTION_EXTENSION = .sln VCPROJ_KEYWORD = Qt4VSv1.0 include(angle.conf)
五、數據庫插件配置相關文件修改:
TARGET = qsqlmysql HEADERS += $$PWD/qsql_mysql_p.h SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp #QMAKE_USE += mysql QMAKE_LIBS += -llibmysql -lmysqlclient OTHER_FILES += mysql.json PLUGIN_CLASS_NAME = QMYSQLDriverPlugin include(../qsqldriverbase.pri) INCLUDEPATH += "C:/MySQL/include" LIBPATH += "C:/MySQL/lib"
TARGET = qsqloci HEADERS += $$PWD/qsql_oci_p.h SOURCES += $$PWD/qsql_oci.cpp $$PWD/main.cpp #QMAKE_USE += oci #QMAKE_INCDIR += "C:/instantclient_11_2/sdk/include" #QMAKE_LIBDIR += "C:/instantclient_11_2/sdk/lib/msvc" QMAKE_LIBS += -loci -lociw32 -loraocci11 darwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environ OTHER_FILES += oci.json PLUGIN_CLASS_NAME = QOCIDriverPlugin include(../qsqldriverbase.pri) INCLUDEPATH += "C:/instantclient_11_2/sdk/include" LIBPATH += "C:/instantclient_11_2/sdk/lib/msvc"
TARGET = qsqlodbc HEADERS += $$PWD/qsql_odbc_p.h SOURCES += $$PWD/qsql_odbc.cpp $$PWD/main.cpp #QMAKE_USE += odbc QMAKE_LIBS += odbc32.lib odbcbcp.lib odbccp32.lib unix: DEFINES += UNICODE OTHER_FILES += odbc.json PLUGIN_CLASS_NAME = QODBCDriverPlugin include(../qsqldriverbase.pri) INCLUDEPATH += "C:/Program Files (x86)/Windows Kits/8.1/Include/um" LIBPATH += "C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x86"
【上述軟件的安裝、數據庫客戶端的安裝路徑,不要帶空格!不要用他們的默認安裝路徑,指定到一個沒有空格的安裝路徑裏去。我在弄mysql時吃了虧。】