Comments (24)
我想了一下,还是建议用依赖少的吧。
经过一些测试,我认为的可以考虑的库文件来源:
Product | Description | URL |
---|---|---|
OpenSSL for Windows | Works with MSVC++, Builder 3/4/5, and MinGW. Comes in form of self-install executables. | https://slproweb.com/products/Win32OpenSSL.html |
OpenSSL for Windows | Pre-compiled Win32/64 libraries without external dependencies to the Microsoft Visual Studio Runtime DLLs, except for the system provided msvcrt.dll. | https://indy.fulgan.com/SSL/ |
上表摘自: Binaries - OpenSSLWiki _ Revision as of 08:40, 5 August 2019
选择
如果用从 slproweb.com 下载的 OpenSSL 1.0.2 库,就得带上MSVCR120.DLL
,反之,用 indy.fulgan.com 的。
能少一个是一个,对吧。
而且 indy.fulgan.com 的还不用安装,解压就行了。
关于 OpenSSL 1.1
从 slproweb.com 下载的 OpenSSL 1.1.0 有对VCRUNTIME140.DLL
的依赖(这个库文件被包含在Setup-BesLyric-3.1.1.0.exe
中,它是 MSVC 2015 及其后继版本的运行时库,与 Qt 5.7.1 及其后继版本的依赖 应该 相同——总不会降版本吧),而 Qt 5.12.4 开始支持 OpenSSL 1.1.1 ,所以要么升级 Qt ,要么就还是用旧版本吧。升级 Qt 还会伴随 MSVC 、 Windows SDK 的升级( Qt 5.12.4 已不支持 MSVC 2015 32-bit),或许还有 Linux 、 MacOS 那边依赖的变化,太麻烦,不建议这样做。
另外, OpenSSL 1.0 与 1.1 不兼容。
关于 VC++ 库
由于被这玩意儿搞得头大已经很长时间了,一会儿MSVCRT
一会儿MSVCR120
一会儿又VCRUNTIME140
,所以去查了资料作参考:
from beslyric-for-x.
是,万一环境炸了还会影响工作,代价太大。
所以,我还是把 1.0 和 1.1 的 OpenSSL 都带上吧,直到你切换到 VS >=2017 + Qt >= 5.12.4 的环境;发布新版本时(我觉得最近就可以来一次了,修的 bug 挺多了),如果是我来构建,就用 VS 2015 (MSVC v140) + Qt 5.7.1 的环境,跟你那边匹配。
SOUI 的话,等你换了环境再重新配置并构建一次就行,记得用新版的Build.bat
,它支持 VS 2019 。
from beslyric-for-x.
看来我得用虚拟机装个没有开发环境的系统测试测试
from beslyric-for-x.
好的。
另外,你是用什么打包的 BesLyric 呢,相关的打包脚本有吗?
from beslyric-for-x.
之前觉得写的脚本不通用没有上传上来,刚刚上传到了 github 上,这里
from beslyric-for-x.
看到了! Inno Setup 是个好东西。
from beslyric-for-x.
对于 OpenSSL 1.1 来说,如果缺少“libssl*.dll”和“libcrypto*.dll”,将会输出如下错误:
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
...
from beslyric-for-x.
OpenSSL 1.1.0 已经结束支持了,所以这边对于 1.1 版本的测试都是关于 1.1.1 ;
对于 1.0.2 ,由于 B4X 作者还没有切换到 Qt 5.12.4 及其之后的版本,所以还可以保留。
1.0 与 1.1 不兼容。
from beslyric-for-x.
你前面提到 “Qt 5.12.4 已不支持 MSVC 2015 32-bit” 是说如果升级到 Qt 5.12.4 ,是否意味着不能发布 32bit 的 exe ?
另外,之前使用 Qt 5.7.1 的一个原因是,听说这个版本可以支持到 windows xp(这一点我还只是听说,未亲自证实),你觉得升级到 Qt 5.12.4 会不会有其他可能的版本支持问题导致部分使用旧一点的操作系统无法运行的情况呢?
from beslyric-for-x.
你前面提到 “Qt 5.12.4 已不支持 MSVC 2015 32-bit” 是说如果升级到 Qt 5.12.4 ,是否意味着不能发布 32bit 的 exe ?
不,新版本的 Qt 支持 MSVC 2017 32-bit ( MSVC v141 和 v142 ),同样可发布 32 位的应用程序。
你觉得升级到 Qt 5.12.4 会不会有其他可能的版本支持问题导致部分使用旧一点的操作系统无法运行的情况呢?
这个我还没有查证过,我将在之后找时间验证 5.12.4 以及后续版本(例如当前最新版本为 5.14.1 )对 Windows XP 的兼容性。
不过,我个人认为兼容早已停止支持的操作系统可能不会带来太多好处。我想知道,根据你的统计数据,现在使用 Windows XP 的用户大概有多少呢( B4X 和 BesLyric 之和)?
关注 Qt 对于 Windows XP 的兼容性是否还有其他的考虑?例如你所在公司目前也使用 Qt 开发,而且产品的目标平台包含了 Windows XP 。如果是这样,那确实值得考虑,不过不同版本 Qt 似乎是能够共存的,所以可能问题不大?
from beslyric-for-x.
用户的操作系统倒是没有收集过,收集的用户信息仅仅有 ip 用于登陆统计,只是曾经 18 年在贴吧看到一个用户用的就是 window xp (贴吧链接) 。
我现在的公司确实在用Qt的时候需要考虑到之前操作系统,因为是工控领域的软件,会很大概率出现比较久远的操作系统。
from beslyric-for-x.
查了一下好像qt最后一个支持 xp 的系统是 5.6.3 (5.6支持平台、5.7支持平台)
这样一来也就是原来也不兼容 XP, 这一点倒是不成理由了,不过 Qt 5.12.4 不支持 MSVC 2015 32-bit 这是挺麻烦的,安装包已经有大量的 MSVC v140 相关的 dll, 升级应该比较麻烦
from beslyric-for-x.
用户的操作系统倒是没有收集过,收集的用户信息仅仅有 ip 用于登陆统计,只是曾经 18 年在贴吧看到一个用户用的就是 window xp (贴吧链接) 。
似乎可以考虑多收集“操作系统”这一项,全平台都可以做。
关于这个收集数据的流程我还没读过代码,之后分析好了再开 PR 。
我现在的公司确实在用Qt的时候需要考虑到之前操作系统,因为是工控领域的软件,会很大概率出现比较久远的操作系统。
明白,这个很重要。接下来我准备验证多 Qt 与单 Qt Creator 共存的可行性。
from beslyric-for-x.
……不过 Qt 5.12.4 不支持 MSVC 2015 32-bit 这是挺麻烦的,安装包已经有大量的 MSVC v140 相关的 dll, 升级应该比较麻烦
这是个问题,但到时候真要升级的话,肯定会重新准备附带的库文件的。
现在,由于windeployqt
本身不够成熟,也处理不了 UCRT 的库文件(那堆api-ms-*.dll
),所以之后我将会增加一部分 qmake 指令(而不使用windeployqt.prf
中的指令)到 .pro 文件中,最后使用时在make
添加额外的参数就行(之前在 #35 尝试实现过,但是太丑了)。
详细的我之后开 PR 来说明。
from beslyric-for-x.
……接下来我准备验证多 Qt 与单 Qt Creator 共存的可行性。
看起来是不太容易搞定的:
- https://forum.qt.io/topic/29996/install-qt-sdk-without-qt-creator
- https://bugreports.qt.io/browse/QTBUG-32111
- https://bugreports.qt.io/browse/QTBUG-28101
from beslyric-for-x.
关于旧操作系统的支持,除了对于 Qt 版本的考虑,还有 MSVC :
- 随 Visual Studio 2019 发布的 MSVC 2019 (v142) 不支持 Windows XP ( Configuring Programs for Windows XP );
- 随 Visual Studio 2017 发布的 MSVC 2017 (v141) 需要手动启用对于 Windows XP 的支持(链接同上);
- 随 Visual Studio 2015 发布的 MSVC 2015 (v140) 支持 Windows XP ( Visual Studio 2015 Support for Windows Desktop Development )。
关于 Qt :
- Qt 5.6 需要自己带参数
-target xp -no-directwrite
编译才能支持 XP ( [QTBUG-49711] ); - Qt 5.5 支持 Windows XP ( Minimum Supported Platforms ,尽管这篇文章标记了“ IT SHOULD BE CONSIDERED FOR DELETION. ”)。
虽然我们知道 Qt 5.5 支持 Windows XP ,但是预编译的 Qt 5.5 最高仅支持到 MSVC 2013 ( Index of /archive/qt/5.5/5.5.1 ),除非自己编译( Compile Qt 5.5.0 for Visual Studio 2015 compatibility )。
看起来,单独考虑 MSVC 或 Qt 对于 Windows XP 的支持都是比较容易的,但是一旦合在一起就是麻烦事儿。
自己编译 Qt 其实也是一条路,不过比较难走。
总之,要兼容 Windows XP ,太麻烦了。
from beslyric-for-x.
@BensonLaur ,我这边测试了,如果仅考虑 MSVC ,那么使用 MSVC v141_xp 是可以在 Visual Studio 2019 下构建出能够在 Windows XP SP3 中运行的程序的,只要带上相关的 CRT 和 UCRT 库就行。
SOUI 我也测试了。我使用你网盘里的 SOUI 2.6.3.1 (由于 2.6.3.1 的Build.bat
不支持 VS 2019 ,所以我用的 SOUI 2.9.0.3 的Build.bat
),构建的 BesLyric 2.2.4 在 Windows XP SP3 上运行正常。
我使用v141_xp
工具集, SDK 版本7
(实际上是7.1A
), SubSystem 为Windows (/SUBSYSTEM:WINDOWS)
, Minimum Required Version 为5.01
。
Linker 抱怨 JsonCpp 的 lib 太老,于是用 MSVC 2019 编译了 1.9.2 版本。 Linker 接着抱怨“ LNK2038 mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease' in BesLyric.obj ”,发现 BesLyric 的 CRT 设置为MT
,改成MD
就行。
我不太明白怎么在 CMake 里构建MT
的 lib ,所以 JsonCpp 是MD
的,最终 BesLyric 也是MD
的,就需要在分发时带上 CRT 和 UCRT 库。
综上,不考虑 Qt ,用 VS 2019 + MSVC 2017 (v141 + v141_xp) + MSVC 2019 (v142) 是没问题的;
我猜测,如果要用 Qt 构建 XP 用的程序, VS 2013 + Qt 5.5 的搭配应该是没问题的,可以找个虚拟机单独装这样一个环境,以免把文件关联搞乱。
快卸载掉旧版本吧,你可以直接用上 VS 2019 + Qt 5.14.1 。
再次解释了一遍: #29 (comment)
附 1 :dumpbin /headers BesLyric.exe
的部分结果:
> dumpbin /headers C:\Users\Test-1909\Desktop\BesLyric-2.2.4\Release\BesLyric.exe
Microsoft (R) COFF/PE Dumper Version 14.24.28316.0
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file C:\Users\Test-1909\Desktop\BesLyric-2.2.4\Release\BesLyric.exe
PE signature found
File Type: EXECUTABLE IMAGE
...
OPTIONAL HEADER VALUES
... ...
5.01 subsystem version
... ...
附 2 :SOUI 2.6.3.1 与 2.9.0.3 的Build.bat
的区别:
$ diff Build* -u --color=always
--- Build_2.6.3.1.bat 2017-11-10 17:43:16.423265000 +0800
+++ Build_2.9.0.3.bat 2019-07-26 23:52:35.000000000 +0800
@@ -38,61 +38,82 @@
goto error
)
+for /f "skip=2 delims=: tokens=1,*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" /v "ProgramFilesDir (x86)"') do (
+ set str=%%i
+ set var=%%j
+ set "var=!var:"=!"
+ if not "!var:~-1!"=="=" set strCMD=!str:~-1!:!var!
+ )
+ SET strCMD=%strCMD%\Microsoft Visual Studio\Installer\vswhere.exe
+
+ if exist "%strCMD%" (
+ for /f "delims=" %%i in ('"%strCMD%" -nologo -version [16.0^,17.0] -prerelease -property installationPath -format value') do (
+ set vs2019path=%%i
+ )
+ )
+
rem 选择开发环境
-SET /p selected=2.选择开发环境[1=2008;2=2010;3=2012;4=2013;5=2015;6=2017;7=2005]:
+SET /p selected=2.选择开发环境[1=2005;2=2008;3=2010;4=2012;5=2013;6=2015;7=2017;8=2019]:
if %selected%==1 (
+ SET specs=win32-msvc2005
+ SET vsvarbat="%VS80COMNTOOLS%..\..\VC\vcvarsall.bat"
+ call !vsvarbat! %target%
+ rem call "%VS80COMNTOOLS%..\..\VC\vcvarsall.bat" %target%
+ goto built
+) else if %selected%==2 (
SET specs=win32-msvc2008
SET vsvarbat="!VS90COMNTOOLS!..\..\VC\vcvarsall.bat"
call !vsvarbat! %target%
rem call "%VS90COMNTOOLS%..\..\VC\vcvarsall.bat" %target%
goto built
-) else if %selected%==2 (
+) else if %selected%==3 (
SET specs=win32-msvc2010
SET vsvarbat="%VS100COMNTOOLS%..\..\VC\vcvarsall.bat"
call !vsvarbat! %target%
rem call "%VS100COMNTOOLS%..\..\VC\vcvarsall.bat" %target%
goto built
-) else if %selected%==3 (
+) else if %selected%==4 (
SET specs=win32-msvc2012
SET vsvarbat="%VS110COMNTOOLS%..\..\VC\vcvarsall.bat"
call !vsvarbat! %target%
rem call "%VS110COMNTOOLS%..\..\VC\vcvarsall.bat" %target%
goto built
-) else if %selected%==4 (
+) else if %selected%==5 (
SET specs=win32-msvc2013
SET vsvarbat="%VS120COMNTOOLS%..\..\VC\vcvarsall.bat"
call !vsvarbat! %target%
rem call "%VS120COMNTOOLS%..\..\VC\vcvarsall.bat" %target%
goto toolsetxp
-) else if %selected%==5 (
+) else if %selected%==6 (
SET specs=win32-msvc2015
SET vsvarbat="%VS140COMNTOOLS%..\..\VC\vcvarsall.bat"
call !vsvarbat! %target%
rem call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %target%
goto toolsetxp
-)else if %selected%==6 (
+) else if %selected%==7 (
SET specs=win32-msvc2017
for /f "skip=2 delims=: tokens=1,*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "15.0" /reg:32') do (
- set str=%%i
- set var=%%j
- set "var=!var:"=!"
- if not "!var:~-1!"=="=" set value=!str:~-1!:!var!
- )
- SET value=!value!\VC\Auxiliary\Build\vcvarsall.bat
- rem ECHO Vs2017 path is:!value!
- SET vsvarbat="!value!"
- call !vsvarbat! %target%
- rem call "!value!" %target%
- goto toolsetxp
-)
- else if %selected%==7 (
- SET specs=win32-msvc2005
- SET vsvarbat="%VS80COMNTOOLS%..\..\VC\vcvarsall.bat"
- call !vsvarbat! %target%
- rem call "%VS80COMNTOOLS%..\..\VC\vcvarsall.bat" %target%
- goto built
-) else (
+ set str=%%i
+ set var=%%j
+ set "var=!var:"=!"
+ if not "!var:~-1!"=="=" set value=!str:~-1!:!var!
+ )
+ SET value=!value!\VC\Auxiliary\Build\vcvarsall.bat
+ rem ECHO Vs2017 path is:!value!
+ SET vsvarbat="!value!"
+ call !vsvarbat! %target%
+ rem call "!value!" %target%
+ goto toolsetxp
+) else if %selected%==8 (
+ SET specs=win32-msvc2017
+ SET vs2019path=!vs2019path!\VC\Auxiliary\Build\vcvarsall.bat
+ rem ECHO Vs2019 path is:!vs2019path!
+ SET vsvarbat="!vs2019path!"
+ call !vsvarbat! %target%
+ rem call "!value!" %target%
+ goto toolsetxp
+)else (
goto error
)
:toolsetxp
@@ -110,7 +131,7 @@
) else if %selected%==2 (
SET cfg=!cfg! LIB_ALL
) else if %selected%==3 (
- SET cfg=!cfg! CORE_LIB
+ SET cfg=!cfg! LIB_CORE
) else (
goto error
)
from beslyric-for-x.
从之前的运行反馈来看,使用 SOUI 构建的 2.2.5 版本其实也是不能直接在 XP 上运行的,因为 自带的 Kernel.dll 版本程序也不兼容,那个使用 XP 的客户也是手动换了 Kernel.dll 才能运行的,基于实际的使用情况来看,我觉得可以确认放弃对 XP 支持的考虑了
from beslyric-for-x.
从之前的运行反馈来看,使用 SOUI 构建的 2.2.5 版本其实也是不能直接在 XP 上运行的,因为 自带的 Kernel.dll 版本程序也不兼容,那个使用 XP 的客户也是手动换了 Kernel.dll 才能运行的,基于实际的使用情况来看,我觉得可以确认放弃对 XP 支持的考虑了
可能是因为工具集没选对。如果工具集选对了(例如v141_xp
),就会使用7.1A
版本的 SDK ,在高版本系统的kernel32.dll
里的有些方法就不会被调用了。
公司的客户难免有继续用 XP 的,所以像我在前一个回复中说的,你可以先把所有环境卸载了,然后安装 Visual Studio 2019 ,同时把 XP 支持的组件装上。这里有个配图的教程: visual studio - How to install build tools for v141_xp for VC 2017? - Stack Overflow
这样一来,既能用上新的 IDE 和编译器,又能兼容 XP 系统,是一个比较好的解法。
当然,放弃支持 XP 是一个好选择,到时候不装 XP 支持的组件就可以了。
from beslyric-for-x.
另外,关于 BesLyric 2.2.5 的 SOUI ,这边没有打算更换 SOUI 版本的打算,对于其后续版本的升级也基本不做考虑,考虑主要维护 Beslyric-for-X。
这边工作中的项目由于历史原因一直在维护使用 SOUI 的项目,由于不像 QT 那般的完善,SOUI 的版本升级代码不兼容,并且需要更换 dll, 这个我觉得比较麻烦。
from beslyric-for-x.
关于更换 IDE ,其实我是倾向于保持现在已有的安装的 VS2015,Qt 也是倾向于保留原来的版本的,因为工作中使用的版本就是原来的 VS2015, QT 5.7.1 等,在这之前已经有其他的版本,如果更换新版本不是非常必要,我倾向于不安装太多的不同版本且共存的 IDE
from beslyric-for-x.
SOUI 的话,等你换了环境再重新配置并构建一次就行
SOUI 你已经试了最新版本了,然后不需要改代码了是吗?之前其实换过一次了,然后那时候换版本还代码不兼容。
至于自动升级的逻辑,我那时倒是尝试写了一个自动升级的模块,文件传到了我的 cnblog 博客文件存储区上。
在版本升级检测上,也是将新版本信息放到了 cnblog 博客文件上,虽然博客文件限制了总共只能传100M大小文件,不过对于之前的版本的SOUI倒是够了
from beslyric-for-x.
SOUI 你已经试了最新版本了,然后不需要改代码了是吗?之前其实换过一次了,然后那时候换版本还代码不兼容。
不,你理解错了,我用的依然是 2.6.3.1 。可能是上边的回复写得太复杂了导致难以被理解。
我仅仅是从 SOUI 2.9.0.3 中复制了Build.bat
到 2.6.3.1 以使其支持使用 VS 2019 配置解决方案SOUI.sln
,但我是在 2.6.3.1 里做的配置,与 2.9.0.3 无关。
我所做的是,用v141_xp
工具集构建了 SOUI 2.6.3.1 ,也使用了同样的工具集构建 JsonCPP 和 BesLyric 2.2.4 ,最后在 Windows XP 上测试通过。
SOUI 2.6.3.1 与 2.9.0.3 不兼容,经测试是这样的,所以我没用 2.9.0.3 。
我建议你换成 Visual Studio 2019 + Qt 5.14.1 ,是因为你可以使用新的环境写“旧”的代码,同时不影响生成的程序的功能和兼容性。
SOUI 的话,等你换了环境再重新配置并构建一次就行
这句话的意思是,当你换成了 Visual Studio 2019 ,就需要再做一遍 SOUI 的配置(即运行Build.bat
。其实这个有点类似于很多 Linux 上的项目做的./configure
那一步,你能理解的吧),因为生成解决方案是需要相应版本 VS 参与的。
到时候,你重新解压一个 SOUI 2.6.3.1 出来(我猜测之前配置好的文件可能会导致一些问题),用 VS 2019 配置好,再打开解决方案,把所有的项目都改成v141_xp
工具集,构建,把%SOUIPATH%
设置好,就能像往常一样继续用 SOUI 写支持 Windows XP 的代码了。
from beslyric-for-x.
当然,我提 SOUI 是因为你在你公司里开发的软件也是用的 SOUI ,为了将影响降至最小,我才用 SOUI 做的测试。
from beslyric-for-x.
Related Issues (20)
- 撰写 v3.2.0 版本更新信息 HOT 3
- 纠正错误提示“成功失败”,同时优化内容过长而导致显示不全的提示
- 皮肤盒子箭头对不齐,不好看,删掉 HOT 1
- 在程序里标注 BesLyric-for-X 使用的图标来源
- 可以帮您打包到Arch/Manjaro的AUR源里吗 HOT 4
- 完善登录信息的收集 HOT 4
- Migrate from qmake to CMake | 从 qmake 迁移到 CMake
- Remove the source code copied from FFmpeg | 移除从 FFmpeg 复制的源代码
- Introduce TagLib to process the information in audio files | 引入 TagLib 以处理音频文件中的信息
- Analyze the code with tools before committing | 在提交前使用工具分析代码
- Format the code with tools before committing | 在提交前使用工具格式化代码
- Introduce GitHub Actions | 引入 GitHub Actions
- End the support for 32-bit Windows | 停止对 32 位 Windows 的支持
- End the support for macOS 10.13 | 停止对 macOS 10.13 的支持
- Migrate from Qt 5 to Qt 6 | 从 Qt 5 迁移到 Qt 6
- 无法搜索歌曲? HOT 9
- 无法播放部分WAV文件 HOT 4
- wav 格式音乐播放后,没有声音 HOT 1
- flac ape m4a aac 不能通过拖放添加音乐 HOT 2
- 音樂文件導入後,點擊開始製作沒有聲音 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from beslyric-for-x.