使用QSslSocket时出现未解决的函数问题

18
我尝试运行一个使用Qt编写并使用QSslSocket的简单程序。 我在安装了OpenSSL的Ubuntu 12.04机器上运行此程序。 但是我收到以下错误:
QSslSocket: cannot call unresolved function SSLv3_client_method
QSslSocket: cannot call unresolved function SSL_CTX_new
QSslSocket: cannot call unresolved function SSL_library_init
QSslSocket: cannot call unresolved function ERR_get_error

我该如何修复这些错误?


2
尝试将libcryptolibssl复制到启动应用程序的位置。 - maverik
7个回答

35

在Windows/MinGW上,您需要将这些文件复制到exe目录中。

C:\Qt\Tools\mingw492_32\opt\bin\libeay32.dll
C:\Qt\Tools\mingw492_32\opt\bin\ssleay32.dll

如果您希望与所有应用程序一起使用,则可以将它们复制到C:\Qt\Tools\mingw492_32\bin中。显然,您需要将它们与您的程序一起分发。

实际上,您不需要添加QT += network


这就是为什么我喜欢SO。供您参考,最新的Qt/MinGW在\Qt\Tools\mingw530_32\opt\bin中有这些DLL文件。 - Neurotransmitter
有趣的是,dll文件必须准确地放在exe目录中,添加到工作目录是不起作用的。 - Ali

13

“.pro” 文件在哪里?我正在使用 Qt 和 VisualC++。 - Chintan Soni

3

对于Ubuntu或(基于Debian的Linux)安装openssl和libssl-dev

例如,sudo apt-get install openssl libssl-dev

对于Red Hat、Fedora、CentOS(基于RPM的Linux),请安装openssl和openssl-devel

例如,yum install openssl openssl-devel


3

我曾经遇到过QT 5.0.1和QT 5.1.1相同的问题,最终我意识到我需要将OpenSSL DLL文件复制到应用程序二进制文件旁边。由于某种原因,QT不会从Windows路径加载DLL文件...

我使用了OpenSSL Win32 0_9_8y


2

我将OpenSSL降级到1.0版本,然后它就可以正常工作了。


1

您需要包含此文件:

 #include <QtNetwork>

并在你的 .pro 文件中添加这行代码:

 QT += network

1
谢谢!但如果我没有执行这些步骤,我甚至无法使用QSslSocket本身。 - s4eed
2
您可以在使用 QWebView 时不需要 += network 来使用 QSslSocket。尽管如此,问题并不是由于缺少 += network 导致的,而是由于缺少 OpenSSL DLLs。 - Timmmm

0
在Debian上安装lua-openssl软件包似乎已经解决了我的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接