我有一个使用QWebSocket类但不使用SSL 的应用程序.当我执行使用Qt 5.3编译的版本但Qt 5.7可执行文件冻结以下警告时,它工作正常:
QSslSocket: cannot resolve CRYPTO_num_locks
QSslSocket: cannot resolve CRYPTO_set_id_callback
QSslSocket: cannot resolve CRYPTO_set_locking_callback
QSslSocket: cannot resolve ERR_free_strings
QSslSocket: cannot resolve EVP_CIPHER_CTX_cleanup
QSslSocket: cannot resolve EVP_CIPHER_CTX_init
QSslSocket: cannot resolve sk_new_null
QSslSocket: cannot resolve sk_push
QSslSocket: cannot resolve sk_free
QSslSocket: cannot resolve sk_num
QSslSocket: cannot resolve sk_pop_free
QSslSocket: cannot resolve sk_value
QSslSocket: cannot resolve SSL_library_init
QSslSocket: cannot resolve SSL_load_error_strings
QSslSocket: cannot resolve SSL_get_ex_new_index
QSslSocket: cannot resolve SSLv2_client_method
QSslSocket: cannot resolve SSLv3_client_method
QSslSocket: cannot resolve SSLv23_client_method
QSslSocket: cannot resolve SSLv2_server_method
QSslSocket: cannot resolve SSLv3_server_method
QSslSocket: cannot resolve SSLv23_server_method
QSslSocket: cannot resolve X509_STORE_CTX_get_chain
QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf
QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
QSslSocket: cannot resolve SSLeay
QSslSocket: cannot resolve SSLeay_version
QSslSocket: cannot call unresolved function CRYPTO_num_locks
QSslSocket: cannot call unresolved function CRYPTO_set_id_callback
QSslSocket: cannot call unresolved function CRYPTO_set_locking_callback
QSslSocket: cannot call unresolved function SSL_library_init
QSslSocket: cannot call unresolved function SSLv23_client_method
QSslSocket: cannot call unresolved function sk_num
Run Code Online (Sandbox Code Playgroud)
我没有在5.3版本(正常工作)中看到这些警告,这表明我不应该忽略它们,正如这个问题所要求的那样.此外,QT += network已经在我的src.pro中.
我被引导相信Debian从openssl包中删除了这些符号.谁能告诉我这里发生了什么以及如何解决这个问题?
我正在使用Debian延伸
$ uname -r
4.8.0-2-amd64
Run Code Online (Sandbox Code Playgroud)
我安装了openssl和libssl-dev
openssl is already the newest version (1.1.0c-2).
libssl-dev is already the newest version (1.1.0c-2).
Run Code Online (Sandbox Code Playgroud)
我尝试用Qt 5.3和5.7运行它
$ qmake -v
QMake version 3.0
Using Qt version 5.7.1 in /usr/lib/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)
Fyl*_*han 33
TL; DR
Debian Stretch随OpenSSL 1.1一起提供; Qt使用OpenSSL 1.0; 给Qt它需要什么:
apt install libssl1.0-dev
Run Code Online (Sandbox Code Playgroud)
详细的答案
从这个关于OpenSSL和Qt的答案中,我找到了一个提示,我使用以下方法显示了用于编译时和运行时的SSL库版本:
qDebug()<<"SSL version use for build: "<<QSslSocket::sslLibraryBuildVersionString();
qDebug()<<"SSL version use for run-time: "<<QSslSocket::sslLibraryVersionNumber();
qDebug()<<QCoreApplication::libraryPaths();
Run Code Online (Sandbox Code Playgroud)
它显示:
SSL version use for build: "OpenSSL 1.0.1e-fips 11 Feb 2013"
... lot of SSL warnings...
SSL version use for run-time: 0
("/opt/Qt/5.8/gcc_64/plugins", "/home/Project/..../build...Desktop_Qt_5_8_0_GCC_64bit-Release/src/release/build_linux_64")
Run Code Online (Sandbox Code Playgroud)
但Debian Stretch随OpenSSL 1.1一起提供.正如所料,Web上关于此问题的所有线程都是正确的:这是一个OpenSSL库版本兼容性问题.
我"安装libssl1.0-dev",问题解决了.我仍然有2个关于SSLv3的SSL警告,但至少这只是警告(我在网上读到一些关于它的东西,无法再找到它).
SSL version use for build: "OpenSSL 1.0.1e-fips 11 Feb 2013"
QSslSocket: cannot resolve SSLv3_client_method
QSslSocket: cannot resolve SSLv3_server_method
SSL version use for run-time: 268443839
("/opt/Qt/5.8/gcc_64/plugins", "/home/Project/..../build...Desktop_Qt_5_8_0_GCC_64bit-Release/src/release/build_linux_64")
Run Code Online (Sandbox Code Playgroud)
摘要
在Qt支持OpenSSL 1.1之前,您可以:
小智 6
我在debian stretch服务器上遇到了同样的问题.我在7hibaults评论的帮助下修复了它.
运行以下命令为我解决了问题:
__CODE__
小智 6
对于那些使用Ubuntu 的 用户,18.04+您可以使用这个构建版本,它也适用于较新的版本。
sudo apt-add-repository -y ppa:rael-gc/rvm
sudo apt-get update
sudo apt-get install libssl1.0-dev
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16606 次 |
| 最近记录: |