Я пытаюсь сделать статическую сборку Qt (версия 5.4.1) с поддержкой OpenSSL. Я настроил его следующим образом:
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
Включаются каталоги include и lib. Я получаю множество ошибок связывания в Qt5Network.lib
.
Qt5Network.lib(qhttpnetworkconnectionchannel.obj) : error LNK2019: unresolved ex
ternal symbol "public: static class QSharedPointer<class QSslContext> __cdecl QS
slSocketPrivate::sslContext(class QSslSocket *)" ([email protected]@
@[email protected]@@@@[email protected]@@Z) referenced in function
"protected: void __thiscall QHttpNetworkConnectionChannel::_q_connected(void)"
([email protected]@@IAEXXZ)
Qt5Network.lib(qhttpprotocolhandler.obj) : error LNK2019: unresolved external sy
mbol "public: __int64 __thiscall QSslSocket::encryptedBytesToWrite(void)const "
([email protected]@@QBE_JXZ) referenced in function "private: vi
rtual bool __thiscall QHttpProtocolHandler::sendRequest(void)" ([email protected]
[email protected]@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.
Есть ли у кого-нибудь идея решить эту проблему?
UPDATE
Эти конфигурации создают ту же ошибку:
Конфигурация 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 wiki и получил те же ошибки.
Если это действительно ошибка Qt, как сказал Фрэнк в его комментарии, было бы также очень полезно, если бы кто-то мог предложить последнюю версию Qt, с которой это должно работать.
ОБНОВЛЕНИЕ 3
Вкл bugreports.qt.io Я получил мнение, что это не ошибка:
На самом деле вы не сказали сборке связывать библиотеки openssl. http://doc.qt.io/qt-5/ssl.html дает следующий пример:
OPENSSL_LIBS = '- L/opt/ssl/lib -lssl -lcrypto'./configure -openssl-сшитый
Вам нужно будет настроить его для своих мест компилятора и библиотеки Конечно.
На указанной странице документации приведен пример:
OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked
Я не нахожу ssl или крипто библиотеки в сборке OpenSSL, которую я скомпилировал, ни в двоичном дистрибутиве. Однако у меня есть заголовки. У меня есть только библиотеки 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 (4 дня назад), и с этим мне удалось создать статическую сборку с динамически подключенным OpenSSL (-openssl switch).
Я все еще ищу решение для статической ссылки OpenSSL. У меня все еще есть те же ошибки связывания.