解决Linux下Qt程序报『QString::arg: Argument missing: 无法解析SSLv2_client_method中的符号』错误

解决Linux下Qt程序报『QString::arg: Argument missing: 无法解析SSLv2_client_method中的符号』错误

 

在Linux开发Qt应用,程序会报这样的错误:

QString::arg:Argument missing: 无法解析SSLv2_client_method中的符号“SSLv2_client_method”:ssl,(/lib/x86_64-linux-gnu/libssl.so.1.0.0: undefined symbol: SSLv2_client_method)

QString::arg:Argument missing: 无法解析SSLv2_client_method中的符号“SSLv2_client_method”:crypto,(/lib/x86_64-linux-gnu/libcrypto.so.1.0.0: undefined symbol:SSLv2_client_method)

qt.network.ssl:QSslSocket: cannot resolve SSLv2_client_method

QString::arg:Argument missing: 无法解析SSLv2_server_method中的符号“SSLv2_server_method”:ssl,(/lib/x86_64-linux-gnu/libssl.so.1.0.0: undefined symbol: SSLv2_server_method)

QString::arg:Argument missing: 无法解析SSLv2_server_method中的符号“SSLv2_server_method”:crypto, (/lib/x86_64-linux-gnu/libcrypto.so.1.0.0:undefined symbol: SSLv2_server_method)

qt.network.ssl:QSslSocket: cannot resolve SSLv2_server_method

QString::arg:Argument missing: 无法解析res_nclose中的符号“res_nclose”:libresolv.so.2,(/lib/x86_64-linux-gnu/libresolv.so.2: undefined symbol: res_nclose)

这是在使用QString::arg( )函数的时候报的错误,查看了相关的帖子和资料,查到是Ubuntu这个操作系统带的OpenSSL库中,没有编译SSLv2这一类函数,估计是安全方面原因吧。

了解了问题的所在,我们来寻找一下解决方法。因为我们也无意修改Ubuntu的核心OpenSSL库,但是希望不报这样的错误,因此我们在构建OpenSSL的同时,不将其放在/usr/lib上,而是放在Qt的lib目录下,这样可以避免出现这样的错误。下面是具体的解决方法,不用担心,很快就能够解决。
1、从网络上下载OpenSSL库的源代码。地址是:

http://openssl.org

解决Linux下Qt程序报『QString::arg: Argument missing: 无法解析SSLv2_client_method中的符号』错误_第1张图片

我们下载最新的OpenSSL 1.0.2b。

2、Ctrl +Alt + T,打开终端,定位下载的OpenSSL位置,我这里的命令是:

cd~/Develop/openssl-1.0.2b

3、配置一下OpenSSL,让它产生动态链接库:

./configenable-shared

4、执行构建

make

5、将产生的.so文件和它的链接复制到对应的QtSDK/lib文件夹中,具体来说是这几个文件:

libcrypto.so

libcrypto.so.1.0.0

libssl.so

libssl.so.1.0.0

这里我放在的位置是:

~/Develop/Qt5.5.0Beta/5.5/gcc_64/lib

再运行相关程序,遇到了QString::args( )函数的时候,就不报这些错误了。

上面紫色底纹的文字,是我暂时没有办法解决的,原因是Linux核心库glibc其中的libresolv.so.2文件中缺少res_nclose这样的函数符号。可能也是Ubuntu团队的原因没有编译这个函数符号,解决方法是在Linux的所有发行版的glibc库中寻找到libresolv.so.2这个动态链接库,然后同样放在类似

~/Develop/Qt5.5.0Beta/5.5/gcc_64/lib

这样的目录,但是截止我写博客的时候,我仍然没有找到合适的动态链接库。

你可能感兴趣的:(linux,qt)