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程序时指定加载该版本库:
终端直接运行:
Qt Creator配置:LD_LIBRARY_PATH=$HOME/local/openssl-1.1.1q/lib64 ./你的Qt应用程序名- 打开项目「运行」设置
- 在「环境变量」中添加
LD_LIBRARY_PATH,值为$HOME/local/openssl-1.1.1q/lib64 - 保存后重新运行程序
方法二:安装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
相关产品推荐
相关产品推荐

