Qt Linux部署遇网络问题:HTTPS下载失败疑缺OpenSSL
从你给出的报错信息来看,问题非常明确:你的程序在运行时找不到OpenSSL相关的库文件,导致HTTPS请求无法正常完成。虽然你已经打包了Qt Network库,但Qt处理HTTPS请求时依赖的OpenSSL库并没有被包含进去,而且因为Qt采用动态加载的方式调用OpenSSL(而非直接链接),所以用ldd命令查不到这些依赖——这就是为什么本地运行正常但打包后出问题的核心原因。
下面是针对你情况的简单解决步骤,都是容易操作的命令和动作:
步骤1:找到本地系统中的OpenSSL库
因为你的本地电脑能正常运行程序,说明本地已经安装了正确版本的OpenSSL库。打开终端,执行以下命令查找这些库:# 查找负责SSL加密通信的libssl库 find /usr -name "libssl.so.*" # 查找负责加密算法实现的libcrypto库 find /usr -name "libcrypto.so.*"你会得到类似这样的结果(具体路径和版本号可能和你的系统不同):
/usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0步骤2:复制OpenSSL库到你的压缩包中
把上面找到的两个(或对应版本的)库文件,复制到你打包的压缩包目录里,和libQt5Network.so.5等Qt库放在同一个文件夹下。
注意:如果找到的结果里有软链接(比如libssl.so.1指向libssl.so.1.0.0),最好把软链接和实际的库文件都复制过去,这样程序能正确识别并加载对应的版本。步骤3:重新打包并测试
把包含了OpenSSL库的文件重新打包成.zip,发给同事解压运行。此时程序应该能正常加载SSL库,完成HTTPS文件下载了。
额外提示(可选)
如果觉得手动找库麻烦,也可以用linuxdeployqt工具来自动打包所有依赖(包括OpenSSL)。这个工具会自动扫描你的Qt程序,把所有需要的库、插件都打包好,适合不想手动处理依赖的场景。不过对你来说,手动复制OpenSSL库已经足够解决当前问题了。
内容的提问来源于stack exchange,提问作者user7431005

