You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fedora Linux下OpenSSL版本不兼容致QWebSocket失效的问题求助

解决Qt 6.4.2二进制版在Fedora 37上的OpenSSL版本不兼容问题

核心问题:Qt官方二进制版编译依赖OpenSSL 1.x,但Fedora 37默认使用OpenSSL 3.x,导致QWebSocket的SSL功能失效,出现Incompatible version of OpenSSL、Active TLS backend does not support key creation等错误,最终触发QAbstractSocket::UnsupportedSocketOperationError。


方法一:独立编译OpenSSL 1.1.1并让Qt单独加载

该方法不会覆盖系统默认OpenSSL,安全无冲突:

  • 编译OpenSSL 1.1.1到用户本地目录:
# 安装编译依赖
sudo dnf group install 'Development Tools' -y
sudo dnf install perl-core zlib-devel -y

# 进入Qt提供的OpenSSL源码目录
cd ~/Qt/Tools/OpenSSL/src
# 配置编译路径为用户私有目录,避免干扰系统
./config --prefix=$HOME/local/openssl-1.1.1q --openssldir=$HOME/local/openssl-1.1.1q shared zlib
# 编译并安装
make -j$(nproc)
make test
make install
  • 运行Qt程序时指定加载该版本库:
    终端直接运行:
    LD_LIBRARY_PATH=$HOME/local/openssl-1.1.1q/lib64 ./你的Qt应用程序名
    
    Qt Creator配置:
    1. 打开项目「运行」设置
    2. 在「环境变量」中添加LD_LIBRARY_PATH,值为$HOME/local/openssl-1.1.1q/lib64
    3. 保存后重新运行程序

方法二:安装Fedora官方OpenSSL 1.1兼容包

无需自行编译,直接用官方维护的兼容包:

  • 安装兼容包:
sudo dnf install openssl1.1
  • 运行程序时指定加载路径:
LD_LIBRARY_PATH=/usr/lib64/openssl1.1 ./你的Qt应用程序名

同样可在Qt Creator的运行环境变量中配置该路径。


之前尝试失败的原因

  • 直接将OpenSSL 1.1.1安装到/usr/lib64会覆盖系统默认的libssl.so链接,导致系统程序与Qt程序混合加载不同版本库,触发段错误。
  • 安装Fedora 35的旧版OpenSSL rpm会因系统依赖冲突无法安装,Fedora 37的系统库已全面升级到OpenSSL 3.x。

验证解决效果

运行前可先确认OpenSSL版本是否正确加载:

LD_LIBRARY_PATH=你的OpenSSL1.1路径/lib64 openssl version

输出应为OpenSSL 1.1.1q ...,同时程序中QSslSocket::supportsSsl()会返回true。

内容的提问来源于stack exchange,提问作者myk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:45:37