-
Notifications
You must be signed in to change notification settings - Fork 55
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
安装程序附带的 OpenSSL 库或 VC++ 库可能需要调整 #29
Comments
看来我得用虚拟机装个没有开发环境的系统测试测试 |
好的。 另外,你是用什么打包的 BesLyric 呢,相关的打包脚本有吗? |
之前觉得写的脚本不通用没有上传上来,刚刚上传到了 github 上,这里 |
看到了! Inno Setup 是个好东西。 |
我想了一下,还是建议用依赖少的吧。 经过一些测试,我认为的可以考虑的库文件来源:
上表摘自: Binaries - OpenSSLWiki _ Revision as of 08:40, 5 August 2019 选择如果用从 slproweb.com 下载的 OpenSSL 1.0.2 库,就得带上 能少一个是一个,对吧。 而且 indy.fulgan.com 的还不用安装,解压就行了。 关于 OpenSSL 1.1从 slproweb.com 下载的 OpenSSL 1.1.0 有对 另外, OpenSSL 1.0 与 1.1 不兼容。 关于 VC++ 库由于被这玩意儿搞得头大已经很长时间了,一会儿 |
对于 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
... |
OpenSSL 1.1.0 已经结束支持了,所以这边对于 1.1 版本的测试都是关于 1.1.1 ; 1.0 与 1.1 不兼容。 |
你前面提到 “Qt 5.12.4 已不支持 MSVC 2015 32-bit” 是说如果升级到 Qt 5.12.4 ,是否意味着不能发布 32bit 的 exe ? 另外,之前使用 Qt 5.7.1 的一个原因是,听说这个版本可以支持到 windows xp(这一点我还只是听说,未亲自证实),你觉得升级到 Qt 5.12.4 会不会有其他可能的版本支持问题导致部分使用旧一点的操作系统无法运行的情况呢? |
不,新版本的 Qt 支持 MSVC 2017 32-bit ( MSVC v141 和 v142 ),同样可发布 32 位的应用程序。
这个我还没有查证过,我将在之后找时间验证 5.12.4 以及后续版本(例如当前最新版本为 5.14.1 )对 Windows XP 的兼容性。 |
用户的操作系统倒是没有收集过,收集的用户信息仅仅有 ip 用于登陆统计,只是曾经 18 年在贴吧看到一个用户用的就是 window xp (贴吧链接) 。 我现在的公司确实在用Qt的时候需要考虑到之前操作系统,因为是工控领域的软件,会很大概率出现比较久远的操作系统。 |
似乎可以考虑多收集“操作系统”这一项,全平台都可以做。
明白,这个很重要。接下来我准备验证多 Qt 与单 Qt Creator 共存的可行性。 |
这是个问题,但到时候真要升级的话,肯定会重新准备附带的库文件的。 |
看起来是不太容易搞定的: |
关于旧操作系统的支持,除了对于 Qt 版本的考虑,还有 MSVC :
关于 Qt :
虽然我们知道 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 )。 自己编译 Qt 其实也是一条路,不过比较难走。 总之,要兼容 Windows XP ,太麻烦了。 |
@BensonLaur ,我这边测试了,如果仅考虑 MSVC ,那么使用 MSVC v141_xp 是可以在 Visual Studio 2019 下构建出能够在 Windows XP SP3 中运行的程序的,只要带上相关的 CRT 和 UCRT 库就行。 SOUI 我也测试了。我使用你网盘里的 SOUI 2.6.3.1 (由于 2.6.3.1 的 我使用 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 设置为 综上,不考虑 Qt ,用 VS 2019 + MSVC 2017 (v141 + v141_xp) + MSVC 2019 (v142) 是没问题的; 快卸载掉旧版本吧,你可以直接用上 VS 2019 + Qt 5.14.1 。 再次解释了一遍: #29 (comment) 附 1 : > 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 的 $ 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
) |
从之前的运行反馈来看,使用 SOUI 构建的 2.2.5 版本其实也是不能直接在 XP 上运行的,因为 自带的 Kernel.dll 版本程序也不兼容,那个使用 XP 的客户也是手动换了 Kernel.dll 才能运行的,基于实际的使用情况来看,我觉得可以确认放弃对 XP 支持的考虑了 |
可能是因为工具集没选对。如果工具集选对了(例如 公司的客户难免有继续用 XP 的,所以像我在前一个回复中说的,你可以先把所有环境卸载了,然后安装 Visual Studio 2019 ,同时把 XP 支持的组件装上。这里有个配图的教程: visual studio - How to install build tools for v141_xp for VC 2017? - Stack Overflow 这样一来,既能用上新的 IDE 和编译器,又能兼容 XP 系统,是一个比较好的解法。 当然,放弃支持 XP 是一个好选择,到时候不装 XP 支持的组件就可以了。 |
另外,关于 BesLyric 2.2.5 的 SOUI ,这边没有打算更换 SOUI 版本的打算,对于其后续版本的升级也基本不做考虑,考虑主要维护 Beslyric-for-X。 |
关于更换 IDE ,其实我是倾向于保持现在已有的安装的 VS2015,Qt 也是倾向于保留原来的版本的,因为工作中使用的版本就是原来的 VS2015, QT 5.7.1 等,在这之前已经有其他的版本,如果更换新版本不是非常必要,我倾向于不安装太多的不同版本且共存的 IDE |
是,万一环境炸了还会影响工作,代价太大。 所以,我还是把 1.0 和 1.1 的 OpenSSL 都带上吧,直到你切换到 VS >=2017 + Qt >= 5.12.4 的环境;发布新版本时(我觉得最近就可以来一次了,修的 bug 挺多了),如果是我来构建,就用 VS 2015 (MSVC v140) + Qt 5.7.1 的环境,跟你那边匹配。 SOUI 的话,等你换了环境再重新配置并构建一次就行,记得用新版的 |
SOUI 你已经试了最新版本了,然后不需要改代码了是吗?之前其实换过一次了,然后那时候换版本还代码不兼容。 至于自动升级的逻辑,我那时倒是尝试写了一个自动升级的模块,文件传到了我的 cnblog 博客文件存储区上。 在版本升级检测上,也是将新版本信息放到了 cnblog 博客文件上,虽然博客文件限制了总共只能传100M大小文件,不过对于之前的版本的SOUI倒是够了 |
不,你理解错了,我用的依然是 2.6.3.1 。可能是上边的回复写得太复杂了导致难以被理解。 我仅仅是从 SOUI 2.9.0.3 中复制了 SOUI 2.6.3.1 与 2.9.0.3 不兼容,经测试是这样的,所以我没用 2.9.0.3 。 我建议你换成 Visual Studio 2019 + Qt 5.14.1 ,是因为你可以使用新的环境写“旧”的代码,同时不影响生成的程序的功能和兼容性。
这句话的意思是,当你换成了 Visual Studio 2019 ,就需要再做一遍 SOUI 的配置(即运行 |
当然,我提 SOUI 是因为你在你公司里开发的软件也是用的 SOUI ,为了将影响降至最小,我才用 SOUI 做的测试。 |
与 #27 有关。
可能由于缺少正确的 VC++ 环境导致程序附带的 OpenSSL 库(
libeay32.dll
、ssleay32.dll
,版本 1.0.2.0)无法被加载,以致无法联网。相关错误信息:
获取 SSL 相关信息:
如果环境正确:
测试环境:
把从 https://indy.fulgan.com/SSL/ 找到的相同版本的 OpenSSL 库文件与 Beslyric-for-X 附带的库文件通过 Dependency Walker 对比:
[ ] ADVAPI32.DLL [ ] BCRYPTPRIMITIVES.DLL [ ] CRYPTBASE.DLL [ ] GDI32.DLL [ ] KERNEL32.DLL [ ] KERNELBASE.DLL [ ] LIBEAY32.DLL + [ ] MSVCR120.DLL [ ] MSVCRT.DLL [ ] NTDLL.DLL [ ] RPCRT4.DLL [ ] SECHOST.DLL [ ] SSPICLI.DLL [ ] USER32.DLL [ ] WIN32U.DLL [ ] WS2_32.DLL
Setup-BesLyric-3.1.1.0.exe
中的 OpenSSL 库文件有对Visual C++ 2013 可再发行组件包中的MSVCR120.DLL
的依赖。所以要解决问题,就需要在 BesLyric 的安装包里带上 32 位的
MSVCR120.DLL
。安装包:
我自己提取的:
msvcr120_dll.zip(SHA1: 51B994C006DAB4CEFC337BA845852911A4ACF5FC)
| - msvcr120_12.0.21005.1.dll(SHA1: F19E9D8317161EDC7D3E963CC0FC46BD5E4A55A1)
\ - msvcr120_12.0.40660.0.dll(SHA1: B2D5A8B5C0FD735038267914B5080AAB57B78243)
经测试,使用任一版本的
MSVCR120.DLL
均可,但建议使用新版本的。注意:Qt 5.7.1 中的 Qt Creator 4.2.0 所在文件夹中有相同的 OpenSSL 库文件,但我并没有发现放在一起的 VC++ 运行库,不清楚 Qt Creator 是怎么使用它们的。
The text was updated successfully, but these errors were encountered: