问题现象如下:
在我自己电脑上没有任何问题,打包程序给别人之后就出现这个问题。
完整错误信息如下所示:
QSslSocket::startServerEncryption: TLS initialization failed
在网上查来查去的,都说是将OpenSSL的两个dll:libeay32.dll和ssleay32.dll复制到exe的运行目录中,但是打包之后在别人电脑上还是同样的问题。
憋着没法,把自己电脑上的这两个库全部删了,结果我自己电脑上还是没有问题,可以正常运行。
之后,网上找到有说安装OpenSSL库的,抱着试一试的态度,安装了Win64OpenSSL-1_1_1h这个包,打开目录发现里面的dll的名字不一样,分别是:libcrypto-1_1-x64.dll和libssl-1_1-x64.dll,于是乎又开始找电脑上是否有这两个库,结果在C盘中还真有,删除掉之后,发现自己电脑上运行就出问题了,将那两个dll复制到exe所在目录,运行问题消失,但是打包到别人电脑上,还是不行,暂时不知道原因。
最后,没办法处理了,只有将QWebSocket的连接方式改成不要SSL的。这里出现了一个新问题,就是WebSocket的发送不能跨线程,必须在同一个线程中执行,所以改了一下代码结构。
理论上在别人电脑上安装Win64OpenSSL-1_1_1h是可以解决问题的,但是总不能让客户自己去下载这个库吧,由于安全要求没那么严格,所以直接去掉了SSL库。