【发布时间】:2013-01-12 00:54:49
【问题描述】:
我有带有 MSVC 的 Qt 4.8.4(默认安装)。 在我的应用程序中,我使用 ssl 连接到服务器。 QtNetworkd4.dll 需要运行时 libeay32.dll 和 ssleay32.dll 如果我将这些库放在我的应用程序目录中,一切正常。
我试图将 openssl 库静态编译到我的应用程序中,虽然编译正常,但在启动应用程序期间抱怨未解析的符号,直到我将 libeay32.dll 和 ssleay32.dll 放入应用程序文件夹。
所以问题是:将这些库编译到我的应用程序中是真的吗,因为 QtNetwordkd4.dll 不会在我的应用程序二进制文件中查找所需的函数/符号,我宁愿用内置的 openssl 编译整个 Qt?像这样:
configure -openssl -I C:\OpenSSL-Win32\include -L C:\OpenSSL-Win32\lib\VC\static
或者我正在尝试做的实际上是可行的,而我只是做错了什么,比如 libeay32 和 ssleay32 的错误版本等?
我尝试使用静态 openssl 编译有两个原因
- 我不必将 libeay32 和 ssleay32 放在我的应用程序目录中
- 恐怕在某些机器上可能已经安装了不同版本的openssl,我的应用程序将与系统目录中的这些库进行交互。
【问题讨论】:
-
是否可以选择使用 -openssl 重新编译 QT?
-
Qt 通常对 ssl 库执行 LoadLibrary/dlopen,因此静态链接无济于事。我认为有-openssl-linked,不确定它是否适用于Windows。 2. 如果 DLL 就在二进制文件旁边,这不是问题。见msdn.microsoft.com/en-us/library/windows/desktop/…
-
我检查了来自 msdn 的链接,在启用和禁用 SafeDllSearchMode 两种情况下,首先搜索 dll 的位置是加载应用程序的目录。这是否意味着我可以确保我放置在我的应用程序目录中的 dll 会首先加载?
-
关于 -openssl 和 -openssl-linked 这两个选项在 Windows 上都可用,但设置 -openssl-linked 不会创建内置 openssl 的二进制文件,而是要求 Qt 在每个选项中都有 openssl 库据我所知,使用 QtNetwork 的时间。