使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序
来源:互联网 发布:vue.js小书 mobi 编辑:程序博客网 时间:2024/06/05 03:12
一.直接使用VS2012/VS2013/VS2015生成XP兼容的可执行程序
Visual Studio刚发布时没打补丁,称为RTM版,之后会陆续发布补丁,进行bug修复和功能增强。VS2010及之前版本的补丁为Service Pack,VS2012及之后版本的补丁称为Update。这些补丁都是向下兼容的,比如说打了Update2补丁,就不需要再打Update1补丁了。
微软官网上现在只能搜索到VS2010 Service Pack1https://www.microsoft.com/zh-cn/download/details.aspx?id=23691,从该补丁的系统要求可以看出VS2010支持XP、Vista和Win7,但是不支持Win8和Win10。因此用VS2010生成的可执行程序能直接在XP上运行。
再来搜索一下VS2012,这里以旗舰版https://www.microsoft.com/zh-cn/download/details.aspx?id=30678为例,从它的系统要求可以看出VS2012支持Win7和Win8,但是不支持XP和Win10。
VS2013、VS2015和VS2017的系统要求信息这里https://www.visualstudio.com/zh-cn/productinfo/vs-servicing-vs统一展示了出来,不用再去搜索了。VS2013也只支持Win7和Win8。从VS2015开始新增加了对Win10的支持。为防止网页失效,还是截个图吧。
也就是说理论上从VS2012开始,生成的可执行文件就不能再XP上运行了。但是由于XP用户量依然很大,微软在发布了VS2012 RTM没多久,就紧接着发布了Update1补丁,该补丁重要的改进有两处,一是在平台工具集里添加了支持生成运行于XP的选项;二是添加了对C++11特性的支持。
如何查看Visual Studio是否打了补丁,方法很简单,点击菜单“帮助”——>“关于 Microsoft Visual Studio”,如下图所示,从图中可以看出我的VS2012是打过Update1补丁的。
新建一个基于对话框的MFC工程,名为MFCApplication,然后进行如下设置。
这样生成的MFCApplication.exe放到XP中,双击直接可以运行,不需要任何依赖,如下图所示。
注意“所需最低版本”一定要设置为5.01,如果设置为5.0会提示错误“LNK4010:子系统版本号5.0无效;假定为默认子系统版本”,如下图所示。
这里的默认子系统版本就是说,生成的可执行程序只能在VS2012默认支持的系统上运行,也就是Win7和Win8。如果设置为5.02或者其他值,虽然没这个提示了,但是依然会假定为默认子系统版本,放到XP上运行会依然会提示“不是有效的Win32应用程序”,如下图所示。
至于为何要设置为5.01,可以参考以下两篇博客:
修改WINVER、_WIN32_WINNT和_MSC_VER
Window系统内核版本号及其查看方法
简单的说就是5.01表示系统内核版本号,如果直接查看的话,会发现XP的内核版本号是5.1,但是Windows系统头文件中却将XP的内核版本号定义为0x0501,因此这里用的是5.01,而不是5.1。
至于VS2013和VS2015,如果只是想生成兼容XP的可执行程序,是不需要打补丁的,因为它们向下兼容VS2012。因此有博客说VS2012必须打Update3补丁纯属扯淡。VS2017还没用过,就不说了。
二.使用Qt5.7.0 VS2015生成XP兼容的可执行程序
使用Qt Creator新建一个基于窗口的test工程,然后在pro中加入:
win32 {QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE,5.01DEFINES += _ATL_XP_TARGETINGQMAKE_CFLAGS += /D_USING_V140_SDK71_QMAKE_CXXFLAGS += /D_USING_V140_SDK71_LIBS += -L$$quote(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib)INCLUDEPATH += $$quote(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include)}上面设置是参考了如下两篇文章:
Deploying Qt on XP and getting “not a valid Win32 application”
Qt for Windows - Specific Issues
但是实测时,只需在pro中加入QMAKE_LFLAGS_WINDOWS=/SUBSYSTEM:WINDOWS,5.01(如果程序基于窗口),其他的条件估计是默认设置的。
这些条件还比较好理解的,与直接使用VS时的设置相对应。SDK71就是兼容XP的库,LIBS和INCLUDEPATH给出了其路径,V140是VC的版本,即VS2015。
至于为何用quote,可参考:Qt在pro文件中加入带空格的路径
这样设置后,生成的test.exe放到XP,双击是不能运行的,会提示缺少Qt库,这是因为从官网下载的qt-opensource-windows-x86-msvc2015-5.7.0.exe安装包里包含的是Qt动态库,所以发布的可执行程序必须携带相关的Qt库。这里test.exe(Release版)需要Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll和于平台相关的插件qwindows.dll,该插件在C:\Qt\Qt5.7.0VS2015\5.7\msvc2015\plugins\platforms目录中,直接将platform文件夹拷贝到test.exe同级目录即可,如下图所示。
这样一来虽然不缺Qt库了,但是会缺少VS2015运行时库,提示“没有找到MSVCP140.dll......”,如下图所示。
毕竟该Qt5.7安装包不是静态编译的,且编译时没有指定兼容XP,所以会依赖VS2015运行时库。此时需要安装VS2015的vcredist_x86.exe,vcredist_x86.exe如何获取可参考: Qt查找依赖库的简单方法
将获取的vcredist_x86.exe拷贝到XP中安装即可,安装界面如下图所示。
安装完成后,双击test.exe就可以正常运行了,如下图所示。
- 使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序
- 使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序
- 使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序
- QT5.8 VS2015生成兼容xp系统的可执行程序
- VS2015编译Qt5.7.0生成支持XP的静态库
- QT5.6+opencv2.49+vs2015生成的exe可执行程序打包方法
- vs2015+Qt5.7编译生成的程序在xp中运行提示不是有效的win32程序解决方案
- VS2015/2013兼容老版本程序问题
- vs2015\17支持xp程序生成
- VS2015编写程序不兼容XP解决办法可用。留档
- 获得可执行程序的版本
- 使用NDK生成native C/C++的可执行程序
- 【改进】使用NDK生成native C/C++的可执行程序
- 使用NDK生成native C/C++的可执行程序
- 使用NDK生成native C/C++的可执行程序
- 使用NDK生成native C/C++的可执行程序
- 使用NDK生成native C/C++的可执行程序
- 怎样将win平台QT5.4.1-MingW编译的可执行程序打包给其他电脑使用?
- 如何使两个nginx同时运行
- 第十四周项目二——二叉树排序树中查找的路径
- 查看nginx,apache,mysql,php编译参数
- 第16周 项目1-验证算法(7)归并排序
- ios圆角按钮的实现已经验证功能
- 使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序
- TextView字体加粗
- Android攻城狮—全套必备神级工具
- MapReduce相关一
- 12、自定义Analyzer实现扩展停用词
- 一张图理清CNN脉络 RCNN SPP FASTRCNN FASTERRCNN 到 MSCNN
- 在 Linux 下将 PNG 和 JPG 批量互转的四种方法
- 浅谈TCP优化
- qt/vs常用快捷键