在Windows 環境下編譯Qt靜態庫(QT5.32)


安裝MinGW工具鏈環境

  • 這里在Win32環境下要安裝一個MinGW工具鏈,這里最好是先安裝一個Qt環境,使用Qt自帶的MinGW工具鏈,我這里是先安裝一個Qt5.6的環境再用它來編譯Qt5.3.2的靜態庫.下載並安裝ActivePerl軟件.

  • 這里要用到MSYS環境,把編譯ICU,openssl的gcc 都指向QT5.6.1自帶的工具鏈GCC,這樣才能保能Qt,ICU,openssl
    編譯出來的C++二進制文是兼容的,修改msys_env.bat腳本如下:

    1
    2
    3
    4
    set path=C:\Python27;C:\Perl\bin;C:\Qt\Qt5.6.1\Tools\mingw492_32\bin;D:\mingw\bin;
    D:\mingw\mingw32\bin;D:\mingw\msys\1.0\bin
    set HOME=D:\mingw\msys\1.0
    bash.exe
  • 修改fstab文件,這里從StackOverFlow
    看到解釋

1
2
C:/Qt/Qt5.6.1/Tools/mingw492_32 /mingw
c:/perl/Perl

下載ICU

下載編譯ICU

  • 下載ICU4C_53_1
  • 這里以icu-53_1為例編譯 解壓ICU包進入到source目錄
1
2
3
4
5
bash.exe-3.1$ cd icu/source
bash.exe-3.1$ ./runConfigureICU M inGW --prefix=/c/icu4c53_1 --enable-static --disable-shared
--enable-release --disable-debug
[...]
bash.exe-3.1$ make && make install

編譯openssl

  • 下載 https://www.openssl.org/source/openssl-1.0.1g.tar.gz
  • 編譯openssl 必需要有msys環境.請仔細查看解壓后文件夾里的INSTALL.W32文檔.
  • 運行msys shell ,切換的openssl-1.0.1g目錄下:
    1
    2
    3
    4
    5
    6
    7
    bash.exe-3.1$ ./config --prefix=/c/openssl-1.0.1g no-asm no-shared
    [...]
    bash.exe-3.1$ make depend
    [...]
    bash.exe-3.1$ make
    [...]
    bash.exe-3.1$ make install

編譯Qt源碼

  • 下載Qt5.3.2
  • 解壓文件並且修改 qtbase\mkspecs\win32-g++\qmake.conf 最終文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# qmake configuration for win32-g++
#
# Written for MinGW / gcc 4.6 or higher
#
# Cross compile example for i686-w64-mingw32-g++:
# configure -xplatform win32-g++ -device-option CROSS_COMPILE=i686-w64-mingw32-
#
load(device_config)
MAKEFILE_GENERATOR = MINGW
QMAKE_PLATFORM = win32 mingw
CONFIG += debug_and_release debug_and_release_target precompile_header
DEFINES += UNICODE
QMAKE_COMPILER_DEFINES += __GNUC__ WIN32
QMAKE_EXT_OBJ = .o
QMAKE_EXT_RES = _res.o
QMAKE_COMPILER = gcc
QMAKE_CC = $ ${CROSS_COMPILE}gcc
QMAKE_LEX = flex
QMAKE_LEXFLAGS =
QMAKE_YACC = byacc
QMAKE_YACCFLAGS = -d
QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport
QMAKE_CFLAGS_DEPS = -M
QMAKE_CFLAGS_WARN_ON = -Wall -Wextra
QMAKE_CFLAGS_WARN_OFF = -w
QMAKE_CFLAGS_RELEASE -= -O2
QMAKE_CFLAGS_RELEASE += -Os -momit-leaf-frame-pointer #注意這一行
QMAKE_CFLAGS_DEBUG = -g
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections
QMAKE_CFLAGS_SSE2 = -msse2 -mstackrealign
QMAKE_CFLAGS_SSE3 = -msse3
QMAKE_CFLAGS_SSSE3 = -mssse3
QMAKE_CFLAGS_SSE4_1 = -msse4.1
QMAKE_CFLAGS_SSE4_2 = -msse4.2
QMAKE_CFLAGS_AVX = -mavx
QMAKE_CFLAGS_AVX2 = -mavx2
QMAKE_CFLAGS_IWMMXT = -mcpu=iwmmxt
QMAKE_CFLAGS_NEON = -mfpu=neon
QMAKE_CXX = $ ${CROSS_COMPILE}g++
QMAKE_CXXFLAGS = $ $QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS = $ $QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON = $ $QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $ $QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $ $QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG = $ $QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $ $QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD = $ $QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON = -frtti
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
QMAKE_CXXFLAGS_CXX11 = -std=c++0x
QMAKE_CXXFLAGS_SPLIT_SECTIONS = $ $QMAKE_CFLAGS_SPLIT_SECTIONS
QMAKE_INCDIR =
QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
QMAKE_LINK = $ ${CROSS_COMPILE}g++
QMAKE_LINK_C = $ ${CROSS_COMPILE}gcc
QMAKE_LFLAGS = -static -static-libgcc # 添加這一行
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE = -Wl, -s
QMAKE_LFLAGS_DEBUG =
QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console
QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows
QMAKE_LFLAGS_DLL = -static
QMAKE_LFLAGS_CXX11 =
QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections
QMAKE_LINK_OBJECT_MAX = 10
QMAKE_LINK_OBJECT_SCRIPT = object_script
QMAKE_PREFIX_STATICLIB = lib
QMAKE_EXTENSION_STATICLIB = a
QMAKE_LIBS =
QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK = -lws2_32
QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32
QMAKE_LIBS_OPENGL_ES2 = -llibEGL -llibGLESv2 -lgdi32 -luser32
QMAKE_LIBS_OPENGL_ES2_DEBUG = -llibEGLd -llibGLESv2d -lgdi32 -luser32
QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain
!isEmpty(QMAKE_SH) {
MINGW_IN_SHELL = 1
QMAKE_DIR_SEP = /
QMAKE_DIRLIST_SEP = :
include(../common/shell-unix.conf)
# Because install's ability to set permissions is not relevant on Windows,
# and git's msys does not provide it to start with.
QMAKE_INSTALL_FILE = cp -f
QMAKE_INSTALL_PROGRAM = cp -f
} else {
include(../common/shell-win32.conf)
}
QMAKE_IDL = midl
QMAKE_LIB = $ ${CROSS_COMPILE}ar -ru
QMAKE_RC = $ ${CROSS_COMPILE}windres
QMAKE_STRIP = $ ${CROSS_COMPILE}strip
QMAKE_STRIPFLAGS_LIB += --strip-unneeded
QMAKE_OBJCOPY = $ ${CROSS_COMPILE}objcopy
QMAKE_NM = $ ${CROSS_COMPILE}nm -P
load(qt_config)

創建編譯腳本

  • 創建一個bat的腳本件內容如下,有些變量請按實際系統環境做相應的修改.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set RDIR=c:/Qt/Qt5.6.1
set VERGCC=mingw492_32
set PATH=C:/Python27;C:/Perl/bin;%RDIR%/5.6/%VERGCC%/bin;%RDIR%/Tools/%VERGCC%/bin;C:\icu\bin;%RDIR%/Tools/QtCreator/bin
set INCLUDE=%RDIR%/5.6/%VERGCC%/include;%RDIR%/Tools/%VERGCC%/include;C:\icu4c53_1\include;C:\openssl-1.0.1g\include
set LIB=%RDIR%/5.6/%VERGCC%/lib;%RDIR%/Tools/%VERGCC%/lib;C:\icu4c53_1\lib;C:\openssl-1.0.1g\lib
set SDIR=D:/qt-everywhere-opensource-src-5.3.2
cd %SDIR%
configure.bat -mp -platform win32-g++ -opensource -confirm-license -release
-static -ltcg -c++11 -prefix "c:/Qt/5.3.2-static" -accessibility
-rtti -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -icu -qt-zlib -qt-libpng -qt-libjpeg
-audio-backend -opengl desktop -qml-debug -no-vcproj -no-dbus -nomake tests
-openssl -I C:/openssl-1.0.1g/include -L C:/openssl-1.0.1g/lib
-nomake examples -qt-freetype -no-compile-examples -no-openvg -iconv -no-directwrite
-no-iwmmxt -no-crt -skip qtwebkit
;編譯
mingw32-make
;安裝到-prefix的變量路徑中
mingw32-make install

 

 

https://yjdwbj.github.io/2016/06/27/%E5%9C%A8Windows-%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91Qt%E9%9D%99%E6%80%81%E5%BA%93/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM