zoukankan      html  css  js  c++  java
  • 在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:Perlin;C:QtQt5.6.1Toolsmingw492_32in;D:mingwin;
      D:mingwmingw32in;D:mingwmsys1.0in
      set HOME=D:mingwmsys1.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 MinGW --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
    • 解压文件并且修改 qtbasemkspecswin32-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:icuin;%RDIR%/Tools/QtCreator/bin
    set INCLUDE=%RDIR%/5.6/%VERGCC%/include;%RDIR%/Tools/%VERGCC%/include;C:icu4c53_1include;C:openssl-1.0.1ginclude
    set LIB=%RDIR%/5.6/%VERGCC%/lib;%RDIR%/Tools/%VERGCC%/lib;C:icu4c53_1lib;C:openssl-1.0.1glib
    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/

  • 相关阅读:
    在ASP.NET MVC中使用Redis
    学生管理系统(SSM简易版)总结
    springmvc缓存和mybatis缓存
    解决.NET Web API生成的Help无Controller说明&服务端接收不到请求
    ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
    23 Flutter官方推荐的状态管理库provider的使用
    22 Flutter仿京东商城项目 inappbrowser 加载商品详情、保持页面状态、以及实现属性筛选业务逻辑
    21 Flutter仿京东商城项目 商品详情 请求接口渲染数据 商品属性数据渲染
    16Flutter中的路由 基本路由 基本路由跳转传值(上)
    20 Flutter仿京东商城项目 商品详情 底部弹出筛选属性 以及筛选属性页面布局
  • 原文地址:https://www.cnblogs.com/findumars/p/6251016.html
Copyright © 2011-2022 走看看