Qt 静态编译(5.15.2 MinGW 32-bit)

Qt 静态编译(5.15.2 MinGW 32-bit) 摘要 1 编译前准备 1.1 编译环境准备 系统环境 Qt 版本 gcc Perl Python 1.2 编译环境检测 gcc Perl Python 1.3 源码准备 1.4 编译目录准备 2 生成编译文件 3 编译 4 安装 5 修改conf文件 6 Qt Creator配置 6.1 添加Qt版本 6.2 添加套件 7 选择编译套件

关键字: Qt static 静态 compilation 编译

Qt用久了,静态编译是一个绕不过去的坎,Qt官方不提供静态编译版本的安装包,如果我们在项目后期需要多项目进行优化的话,那肯定是要尝试静态编译程序的,那就需要我们对Qt进行静态编译。

超级指导链接 QT静态编译程序(Mingw编译)

1 编译前准备

编译前准备,主要有两个,一个是编译环境准备,一个源码准备。

1.1 编译环境准备

我使用的系统是win11 详细版本如下

版本 Windows 11 专业工作站版 版本 21H2 安装日期 ‎2022/‎2/‎8 操作系统版本 22000.708 体验 Windows 功能体验包 1000.22000.708.0

Qt 版本

我的Qt版本安装的比较多,本次使用的5.15.2 MinGW版本来编译。为什么不用VS的版本,主要是根据项目来的,后期项目会迁移到Linux下,在用VS版本就不合适了。虽然Qt是夸平台,但是有些功能的实现方式还是不一样的,所以直接一劳永逸,直接使用MinGW版本。详细版本如下

gcc我没有单独安装,是不是在安装Qt的时候已经自动安装了,如果你的工程可以使用MinGW编译,那就是有gcc了,版本见1.2节。

下载地址: www.perl.org/get.html

推荐下载Strawberry Perl,因为相比于ActiveState Perl,它不用注册就可以直接下载

安装完成后记得添加环境变量,默认应该会自动添加。如果没有,就自己手动添加一下,主要是下面两个路径,自己对应一下

C:\Strawberry\perl\site\bin C:\Strawberry\perl\bin

Python

记得之前编译,还必须是下载2版本的Python呢,现在已经可是使用3的了,直接下载Python傻瓜式安装即可,同样需要注意环境变量,Python安装的时候需要勾选添加到环境比变量,如果没有,自己手动添加一下

C:\Users"用户"\AppData\Local\Programs\Python\Python310

1.2 编译环境检测

因为本次我们计划编译的是Qt 5.15.2 MinGW 32 的版本,所以找到对应的Qt 工具。以管理员权限运行程序。

在打开的命令窗口中输入 gcc -v,出现版本,就表示安装好了,如下图所示

同理,输入perl -v,可以确认Perl是否安装好,如下图所示

Python

这个基本不用说,直接输入python,能进去,就说明安装好了,如下图所示

以上都没有问题,就可以准备源码了。

1.3 源码准备

源码准备有两种方案,既然已经到了静态编译了,那么我觉得你一定是安装了Qt的,所以,如果你在安装Qt的时候勾选了源码,就可以在Qt的安装路径下对应的版本文件夹中找到一个叫Src的源码文件夹,如下图所示。

当然,如果你安装的时候没有勾选,也没有关系,可以再次通过增加模块的方法安装源码,不过我没有测试。我们可以用另一种方法,直接到Qt的官网去下载Qt源码,官网链接: 官网 ,在官网下有每个版本的安装包及源码,不过5.14.2 以后好像就没有安装包了,当然商业版除外。

1.4 编译目录准备

注意: 路径不要有中文

所谓的编译目录准备,其实应该有两部分,一个是源码目录,一个是安装目录,但是我们无论是用安装器安装源码Src 还是自己下载源码qt-everywhere-src-5.15.2。其实源码目录就已经确定了,所以我们字需要确定安装目录就好了,这个各位放哪里都可以,但是路径还是不要有中文。我一般还是和Qt的动态库放在统计目录。如下图所示。

2 生成编译文件

这个就是开源版本最大坑,需要我们有一定的动手能力,不过前辈们已经帮我们处理了好多了。直接拷贝替换就可以。下图中红色框中路径就是我们的安装路径,把对应的安装路径替换了就可以。首先在1.3 指令框中,需要CD切换环境到我们的源码路径,输入以下指令,即可完成编译文件的生成。

 configure.bat  -static -release -confirm-license  -opensource -opengl desktop -platform win32-g++  -prefix "C:\Dev\Qt\5.15.2\mingw81_32_static" -sql-sqlite  -sql-odbc -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -make libs  -nomake tools -nomake examples -nomake tests -skip qt3d  -skip qtcanvas3d -skip qtdatavis3d -skip qtlocation -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview

当然,这个不是绝对的,感情的小伙伴可以研究下Qt 的configure指令,商业版直接有可视化工具,开源版本我们只能自己摸索了。链接就放这里,这里我截图保存一下,之所以抹掉作者的水印是担心CSDN检测水印不给上传。感兴趣的可以自己摸索配置指令。

  -help,-h ............显示此帮助屏幕   -verbose,-v .........在配置期间输出详细消息   -continue............尽管有错误仍然继续配置   -redo ................用以前使用的选项重新配置。其他选项可能会通过,但不会保存以供-redo稍后使用。   -recheck .............放弃缓存的负配置测试结果。安装缺失的依赖关系后使用它。   -recheck-all .........放弃所有缓存的配置测试结果。   -feature- <特征> ...启用<特征>   -no-feature- <feature>禁用<feature> [none]   -list-features .......列出可用功能。请注意一些功能也有专用的命令行选项。   -list-libraries ......列出可能的外部依赖关系。  Build options:   -opensource ..........构建Qt的开源版本   -commercial ..........构建Qt的商业版   -confirm-license .....自动确认许可证   -release.............关闭调试版本的Qt [yes]   -debug ...............打开调试生成Qt [no]   -debug-and-release ...构建两个版本的Qt,包含和不包含打开调试[是](仅适用于Apple和Windows)   -optimize-debug ......在调试版本中启用调试友好的优化[自动](MSVC不支持)   -optimize-size .......优化发布版本的大小而不是速度[no]   -optimized-tools .....甚至在调试版本中构建优化的主机工具[no]   -force-debug-info ....为发布版本创建符号文件[no]   -separate-debug-info。分离调试信息以分离文件[no]   -strip ...............释放不需要的符号的二进制文件[是]   -force-asserts .......即使在发布版本中启用Q_ASSERT [no]   -developer-build .....编译并链接Qt以开发Qt本身(用于自动测试的出口,额外检查等)[no]   -shared..............建立共享的Qt库[是](不适用于UIKit)   -static ..............构建静态Qt库[no](对于UIKit是)   -framework ...........构建Qt框架包[是](仅限Apple)   -platform <target> ...选择主机mkspec [检测到]   -xplatform <target> ..交叉编译时选择target mkspec [PLATFORM]   -device <name> .......交叉编译设备<name>   -device-option <key = value> ...为设备mkspec添加选项   -appstore-compliant ..禁用平台应用商店中不允许使用的代码。默认情况下,默认情况下,默认情况下,平台需要通过默认应用商店进行分发,特别是Android,iOS,tvOS,watchOS和Universal Windows Platform。 [汽车]   -qtnamespace <name> ..将所有Qt库代码封装在'namespace <name> {...}'中。   -qtlibinfix <infix>将所有libQt5 * .so重命名为libQt5 * <infix> .so。   -testcocoon ..........带有TestCocoon代码覆盖工具的仪器[no]   -gcov ................具有GCov代码覆盖工具的仪器[no]   -sanitize {address | thread | memory | undefined}仪器与指定的编译器消毒剂。   -c ++ std <edition> ....选择C ++标准<edition> [c ++ 1z / c ++ 14 / c ++ 11](不支持MSVC)   -sse2 ................使用SSE2指令[自动]   -sse3 / -ssse3 / -sse4.1 / -sse4.2 / -avx / -avx2 / -avx512启用特定的x86指令[auto]启用的仍然受到运行时检测。   -mips_dsp / -mips_dspr2使用MIPS DSP / rev2指令[auto]   -qreal <type> ........ typedef qreal到指定的类型。 [双]注意:这会影响二进制兼容性。   -R <string> ..........为Qt添加一个显式的运行时库路径库。支持相对于LIBDIR的路径。   -rpath ...............使用库链接Qt库和可执行文件将路径安装为运行时库路径。如同-R LIBDIR。在苹果平台上,禁用这意味着使用绝对安装名称(基于         LIBDIR)动态库和框架。 [汽车]减少输出......减少输出符号的数量[自动]   -reuce-relocations ..减少重定位量[auto](仅适用于Unix)   -plugin-manifests ....将清单嵌入插件[no](仅限Windows)   -static-runtime ......使用-static,使用静态运行时[no](仅限Windows)   -pch .................使用预编译头文件[auto]   -ltcg ................使用链接时间码生成[no]   -use-gold-linker .....使用GNU gold链接器[auto]   -incredibuild-xge ....使用IncrediBuild XGE [no](仅限Windows)   -ccache ..............使用ccache编译器缓存[no](仅适用于Unix)   -make-tool <tool> ....使用<tool>构建qmake [nmake](仅适用于Windows)   -mp ..................使用多个处理器进行编译(仅限MSVC)   -warnings-are-errors。将警告视为错误[no; yes如果-developer-build]   -silent ..............减少构建输出以便发出警告和错误可以更容易地看到  Build environment:   -sysroot <dir> .......将<dir>设置为目标sysroot   -gcc-sysroot .........使用-sysroot,将编译器通过--sysroot [yes]   -pkg-config ..........使用pkg-config [auto](仅适用于Unix)   -D <string> ..........传递附加的预处理器定义   -I <string> ..........传递额外的包含路径   -L <string> ..........传递额外的库路径   -F <string> ..........传递额外的框架路径(仅适用于Apple)   -sdk <sdk> ...........使用Apple提供的SDK <sdk>构建Qt。争论应该是以下列出的可用SDK之一'xcodebuild -showsdks'。请注意,该参数仅适用于Qt库和使用目标mkspec构建的应用程序 - 不是主机工具,如qmake,moc,rcc等。   -android-sdk path ....设置Android SDK根路径[$ ANDROID_SDK_ROOT]   -android-ndk路径....设置Android NDK根路径[$ ANDROID_NDK_ROOT]   -android-ndk-platform设置Android平台   -android-ndk-host ....设置Android NDK主机(linux-x86,linux-x86_64等)[$ ANDROID_NDK_HOST]   -android-arch ........设置Android体系结构(armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,mips,mips64)   -android-toolchain-version ...设置Android工具链版本   -android-style-assets自动从设备中提取样式资产运行。此选项使Android样式表现良好正确的,但也使得Android平台插件与LGPL2.1不兼容。 [是]  Component selection:   -skip <repo> .........从构建中排除整个存储库。   -make <part> .........将<part>添加到要构建的零件列表中。指定此选项将首先清除默认列表。[库和例子,如果不是交叉构建也是工具,还测试是否 -  开发人员构建]   -nomake <part> .......从要构建的零件列表中排除<part>。   -compile-examples ....未设置时,只安装示例的源代码[是]   -gui .................构建Qt GUI模块和依赖[yes]   -widgets .............编译Qt Widgets模块和依赖[yes]   -no-dbus .............不要构建Qt D-Bus模块[Android和Windows默认]   -dbus-linked .........构建Qt D-Bus并链接到libdbus-1 [auto]   -dbus-runtime ........构建Qt D-Bus并动态加载libdbus-1 [no]   -accessibility.......启用可访问性支持[是]注意:不建议禁用可访问性。   -qml-debug ...........启用QML调试支持[yes]  Qt附带一些第三方库的捆绑副本。这些被使用默认情况下,如果自动检测相应的系统库失败。  Core options:   -doubleconversion ....选择使用的双转换库[system / qt / no]没有暗示使用sscanf_l和snprintf_l(不精确)。   -glib ................启用Glib支持[no;在Unix上自动]   -eventfd .............启用eventfd支持   -inotify .............启用inotify支持   -iconv ...............启用iconv(3)支持[posix / sun / gnu / no](仅适用于Unix)   -icu .................启用ICU支持[自动]   -pcre ................选择使用的libpcre2 [system / qt]   -pps .................启用PPS支持[自动](仅限QNX)   -zlib ................选择用过的zlib [system / qt]  Logging backends:     -Journald ..........启用日志支持[no](仅限Unix)     -syslog ............启用syslog支持[no](仅适用于Unix)     -slog2 .............启用slog2支持[自动](仅限QNX)  Network options:   -ssl .................启用SSL支持方法[自动]   -no-openssl ..........不要使用OpenSSL [Apple和WinRT上的默认]   -openssl-linked ......使用OpenSSL并链接到libssl [no]   -openssl-runtime .....使用OpenSSL并动态加载libssl [auto]   -securetransport .....使用SecureTransport [auto](仅限Apple)   -sctp ................启用SCTP支持[no]   -libproxy ............启用libproxy的使用[no]   -system-proxies ......默认使用系统网络代理[yes]  Gui, printing, widget options:   -cups ................启用CUPS支持[自动](仅适用于Unix)   -fontconfig ..........启用Fontconfig支持[auto](仅适用于Unix)   -freetype ............选择使用的FreeType [system / qt / no]   -harfbuzz ............选择用过的HarfBuzz-NG [系统/ qt / no](不在Apple和Windows上自动检测)   -gtk .................启用GTK平台主题支持[auto]   -lgmon ...............启用lgmon支持[自动](仅限QNX)   -no-opengl ...........禁用OpenGL支持   -opengl <api> ........启用OpenGL支持。支持的API:es2(在Windows上默认),桌面(在Unix上默认),动态(仅限Windows)   -opengles3 ...........启用OpenGL ES 3.x支持而不是ES 2.x [自动]   -angle ...............使用捆绑的ANGLE支持OpenGL ES 2.0 [自动](仅限Windows)   -combined-angle-lib ..将LibEGL和LibGLESv2合并到LibANGLE(仅限Windows)   -qpa <name> ..........选择默认的QPA后端(例如,xcb,cocoa,windows)   -xcb-xlib .............启用Xcb-Xlib支持[auto]  Platform backends:     -direct2d ..........启用Direct2D支持[自动](仅限Windows)     -directfb ..........启用DirectFB支持[no](仅适用于Unix)     -eglfs .............启用EGLFS支持[auto;没有在Android和Windows上]     -gbm ...............为GBM [auto]启用后端(仅限Linux)     -kms ...............启用KMS [auto]的后端(仅适用于Linux)     -linuxfb ...........启用Linux Framebuffer支持[auto](仅限Linux)     -mirclient .........启用Mir客户端支持[no](仅Linux)     -xcb ...............选择使用的xcb- *库[system / qt / no](-qt-xcb仍然使用libxcb本身的系统版本)  Input backends:     -evdev .............启用evdev支持[auto]     -imf ...............启用IMF支持[自动](仅限QNX)     -libinput ..........启用libinput支持[auto]     -mtdev .............启用mtdev支持[auto]     -tslib .............启用tslib支持[自动]     -xinput2 ...........启用XInput2支持[自动]     -xkbcommon-x11 .....选择与xcb结合使用的xkbcommon[系统/ QT / NO]     -xkb-config-root <dir> ...使用-qt-xkbcommon-x11,设置默认的XKB配置根目录<dir> [检测]     -xkbcommon-evdev ...启用X-less xkbcommon与libinput结合使用[汽车]  Image formats:     -gif ...............启用对GIF的读取支持[自动]     -ico ...............启用对ICO的支持[是]     -libpng ............选择用过的libpng [system / qt / no]     -libjpeg ...........选择使用的libjpeg [system / qt / no]  Database options:   -sql- <driver> ........启用SQL <驱动程序>插件。支持的驱动db2 ibase mysql oci odbc psql sqlite2 sqlite tds[全自动]   -sqlite ..............选择用过的sqlite3 [系统/ qt]  Qt3D options:   -assimp ..............选择使用的assimp库[system / qt / no]   -qt3d-profile-jobs ...启用作业分析[no]   -qt3d-profile-gl .....启用OpenGL分析[no]   -qt3d-simd ...........选择SIMD支持级别[no / sse2 / avx2]   -qt3d-render .........启用Qt3D渲染方面[是]   -qt3d-input ..........启用Qt3D输入方面[是]   -qt3d-logic ..........启用Qt3D逻辑方面[是]   -qt3d-extras .........启用Qt3D Extras方面[yes]   -qt3d-animation .......启用Qt3D动画方面[是]  Multimedia options:   -pulseaudio ..........启用PulseAudio支持[自动](仅适用于Unix)   -alsa ................启用ALSA支持[自动](仅适用于Unix)   -no-gstreamer ........禁用对GStreamer的支持   -gstreamer [版本]。启用GStreamer支持[自动]在没有参数的情况下,首先尝试1.0,然后再尝试0.10。   -mediaplayer-backend <名称> ...选择媒体播放器后端(仅限Windows)支持的后端:directshow(默认),wmf  Webengine options:   -webengine-alsa ................启用ALSA支持[自动](仅限Linux)   -webengine-pulseaudio ..........启用PulseAudio支持[自动](仅限Linux)   -webengine-embedded-build ......启用Linux嵌入式构建[auto](仅限Linux)   -webengine-icu .................使用系统ICU库[system / qt](仅限Linux)   -webengine -ffmpeg ..............使用系统FFmpeg库[system / qt](仅限Linux)   -webengine-opus ................使用系统Opus库[system / qt](仅限Linux)   -webengine-webp ................使用系统WebP库[system / qt](仅限Linux)   -webengine-pepper-plugins ......启用Pepper Flash和Widevine插件[自动]   -webengine-printing-and-pdf ....启用打印和输出到PDF[汽车]   -webengine-proprietary-codecs ..启用对专有编解码器的支持[no]   -webengine-spellchecker ........启用对拼写检查程序的支持[是]   -webengine-native-spellchecker。启用对原生拼写检查器的支持[否](仅限macOS)   -webengine-webrtc ..............启用对WebRTC的支持[自动]

编译就很简单了,这里需要确保我们上一步指令执行正确在可以。编译需要用的make指令,这里取决于我们电脑。主要看你CPU核心数。以我的经验,可以使用你的核心数减2个核心来编译,比如我的是14核心20线程,其实有4个是小核,不能多线程,所以我使用16个核心来编译,就是

 mingw32-make -j16

当然了,可以直接使用mingw32-make,那就最好是晚上开始编译,估计怎么也是8小时起步了吧。

安装就很简单了,在你3 环节不出问题,这个环节只需要输入一下指令,等待完成就可以

 mingw32-make install

5 修改conf文件

在我们编译完成后的对应目录下,找到对应的conf文件,我这次编译的是32为,所以我需要找g++win32.conf。在conf中新增代码

 QMAKE_LFLAGS = -static

再改对应位置代码

 QMAKE_LFLAGS_DLL = -static

如下图所示

6 Qt Creator配置

6.1 添加Qt版本

这里主要是添加qmake,在工具->选项->Qt Versions下选项卡右侧点击添加按钮,到我们刚才编译的安装目录下的bin文件夹中,选择qmake文件,即可

6.2 添加套件

这里推荐克隆,修改起来简单,当然,动手能力强的,完全可以自己新建一个,比如我们是 5.15.2 MinGW 32为版本,那我们就克隆对应的版本,完了只需修该Qt版本即可,如下图

7 选择编译套件

打开我们的项目,在项目选项卡中,添加我们杠杠新的套件即可,如下图


分类:
后端
  •