configure -opensource -release -c++11 -static -platform win32-msvc2013
-openssl-linked -I C:\OpenSSL-Win32\include
-L C:\OpenSSL-Win32\lib\VC\static
-nomake examples -nomake tests
包含目录和库目录都是有效的。我在 Qt5Network.lib
中得到了很多链接错误。
Qt5Network.lib(qhttpnetworkconnectionchannel.obj) : error LNK2019: unresolved ex
ternal symbol "public: static class QSharedPointer<class QSslContext> __cdecl QS
slSocketPrivate::sslContext(class QSslSocket *)" (?sslContext@QSslSocketPrivate@
@SA?AV?$QSharedPointer@VQSslContext@@@@PAVQSslSocket@@@Z) referenced in function
"protected: void __thiscall QHttpNetworkConnectionChannel::_q_connected(void)"
(?_q_connected@QHttpNetworkConnectionChannel@@IAEXXZ)
Qt5Network.lib(qhttpprotocolhandler.obj) : error LNK2019: unresolved external sy
mbol "public: __int64 __thiscall QSslSocket::encryptedBytesToWrite(void)const "
(?encryptedBytesToWrite@QSslSocket@@QBE_JXZ) referenced in function "private: vi
rtual bool __thiscall QHttpProtocolHandler::sendRequest(void)" (?sendRequest@QHt
tpProtocolHandler@@EAE_NXZ)
C:\Qt\5.4\qtbase\bin\xmlpatterns.exe : fatal error LNK1120: 31 unresolved extern
als
jom: C:\Qt\5.4\qtxmlpatterns\tools\xmlpatterns\Makefile [release] Error 2
jom: C:\Qt\5.4\qtxmlpatterns\tools\Makefile [sub-xmlpatterns-make_first] Error 2
jom: C:\Qt\5.4\qtxmlpatterns\Makefile [sub-tools-make_first] Error 2
jom: C:\Qt\5.4\Makefile [module-qtxmlpatterns-make_first] Error 2
之前我能够创建一个不带OpenSSL支持的静态构建。错误消息也提示了问题与OpenSSL有关。
有人有解决这个问题的想法吗?
更新
这些配置都产生了相同的错误:
配置1:
configure -opensource -release -c++11 -static -platform win32-msvc2013
-openssl-linked -I C:\OpenSSL-Win32\include -L C:\OpenSSL-Win32\lib\VC\static
OPENSSL_LIBS="-llibeay32MT -lssleay32MT" -nomake examples -nomake tests
配置 2:
configure -opensource -release -c++11 -static -platform win32-msvc2013
-openssl -I C:\OpenSSL-Win32\include -L C:\OpenSSL-Win32
-nomake examples -nomake tests
更新2
我也尝试按照qBittorrent维基中的优秀教程操作,但是得到了相同的错误。
如果这确实是Qt的错误,就像Frank在他的评论中建议的那样,如果有人能够建议最后一个应该工作的版本,那将非常有用。
更新3
在bugreports.qt.io上,我收到了这不是一个错误的看法:
您实际上没有告诉构建程序链接openssl库。 http://doc.qt.io/qt-5/ssl.html给出以下示例:
OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked
当然,你需要根据你的编译器和库位置进行一些调整。
在所引用的文档页面中,给出了以下示例:
OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked
在我编译的OpenSSL构建中,我没有找到ssl或crypto库,也没有在二进制分发中找到。不过,我有相关的头文件。我只拥有ssleay32和libeay32库。
configure命令提示要将这些库设置为所提到的变量:
NOTE: When linking against OpenSSL, you can override the default
library names through OPENSSL_LIBS
and optionally OPENSSL_LIBS_DEBUG/OPENSSL_LIBS_RELEASE
For example:
configure -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32"
通过设置这个变量,我仍然得到相同的错误。
更新5
虽然不完全是我想要的,但已经有了进展:
我下载了最近发布的Qt 5.4.2的源代码,并使用其中的“-openssl”开关创建了一个动态链接的OpenSSL的静态构建。
我仍在寻找一种静态链接OpenSSL的解决方案。我仍然遇到相同的链接错误。