我有MSVC的Qt 4.8.4(默认安装)。 在我的应用程序中,我正在使用ssl连接到服务器。 QtNetworkd4.dll需要运行时libeay32.dll和ssleay32.dll 如果我将这些库放在我的app目录中,一切正常。
我试图将openssl libs静态编译到我的应用程序中,虽然编译很顺利,在启动应用程序期间抱怨未解析的符号,直到我将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进行编译有两个原因
答案 0 :(得分:2)
试试这样:
-openssl -openssl-linked -I C:\OpenSSL-Win32\include -L C:\OpenSSL-Win32\lib\VC\static OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_DEBUG="-lssleay32MDd -llibeay32MDd" OPENSSL_LIBS_RELEASE="-lssleay32MD -llibeay32MD"
答案 1 :(得分:0)
正确,将OpenSSL静态编译到您的应用程序中是没用的,因为QtNetwork4.dll期望函数是openssl DLL,而不是在您的应用程序中。
您有两个选择是将OpenSSL编译为Qt,或者将libeay32和ssleay32与您的应用程序一起分发。或者,您可以要求您的用户自己安装这些DLL,但版本不匹配可能是件坏事(0.9.x和1.x版本之间存在一些很大的差异)。
答案 2 :(得分:0)
编译Qt时,您可以根据configure
命令行选择其中一个选项:
-no-openssl
)-openssl
;默认)-openssl-linked
)最后一个意味着动态链接(如果Qt构建为共享库)或静态链接(当进行Qt的静态构建时,即-static
)。
因此问题的“解决方案”正在将-static -openssl-linked
传递给Qt的configure
。
我说“”解决方案“”因为