Jump to Navigation

msvc2017编译Qt5.7.1(支持Windows XP) (mingw-x64 gcc-6.3/7.1 qt5.7.1)

msvc2017编译Qt5.7.1(支持Windows XP) (mingw-x64 gcc-6.3/7.1 qt5.7.1)

最近做了点Qt + Windows程序,对最近的Qt情况的一点总结。

Qt也不准备继续支持Windows XP了,Qt5.7.0是官方公开支持的最后一个版本,包括Qt5.7.1都不行。

这里我标题说的没错,本文指的确实是Qt5.7.1,由于同为Qt5.7.x系统,源代码树变动不大,做了个小的调整,能够像Qt5.7.0一样支持Windows XP。

新版本兼容Windows XP宏定义

从vs2012 update4开始,发布了支持Windows XP的解决方案,

vs安装包的名字为:对 C++ 的 Windows XP 支持

msvc2017, USING_V141_SDK71

msvc2015, USING_V140_SDK71,

msvc2013, USING_V120_SDK71,

msvc2012, USING_V110_SDK71,

如果设置的不对,会提示,can not using windows kit 8 to build qt for windows xp

error MSB8036: The Windows SDK version 8.1 was not found

(有可能是误报)

c++11的问题

另外,要拷贝qt5.7.0/qtbase/config.test/common/c++11到qt5.7.1/qtbase/config.test/common目录中。

这项特别对于 mingw 编译 win32 qt5.7.1时要注意。因为qt5.7.1的源代码包已经不带这个目录了。

只编译并安装qtbase

nmake -C qtbase

nmake -C qtbase install

mingw (mingw64)

mingw 已经更新为 mingw64, http://mingw-w64.org/

下载的版本:https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/7.1.0/

mingw 静态链接 libgcc_s_dw2-1.dll, libstdc++-6.dll

sucessfully managed to link statically libstdc++-6.dll and libgcc_s_sjlj-1.dll by using -static-libgcc -static-libstdc++ parameters

编译app时的参数:

g++.exe -Wall -c -g main.cpp -o obj\Debug\main.o

g++.exe -static -static-libgcc -static-libstdc++ -o "bin\Debug\Hello World.exe" obj\Debug\main.o

for qmake:

win32:CONFIG += static

win32:QMAKE_LFLAGS += -static-libgcc -static-libstdc++

mingw 静态链接 libwinpthread

从原理上说,使用 -static 就能静态链接,但是实际在qt的复杂链接关系中不行。

mingw exception sjlj vs. dward vs. seh

sjlj 更常用,但好像只支持 x86 程序,x86_64程序支持有问题。

mingw thread posix vs. win32

一般来说,还是使用 pthread的吧,但这时需要带个winpthread.dll动态库,并且无法静态化。

按照 qt.io 官方编译方式编译一个版本

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.


Main menu 2

Story | by Dr. Radut