Я пытаюсь сделать статическую сборку Qt (версия 5.4.1) с поддержкой OpenSSL. Я сконфигурировал его следующим образом:Статическая сборка ошибки Qt Qt5Network link
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.
У кого-нибудь есть идея решить это?
ОБНОВЛЕНИЕ
Эти конфигурации производят ту же ошибку:
Конфигурация 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, как предложил Фрэнк в his comment, было бы очень полезно, если бы кто-то мог предложить последнюю версию Qt, с которой это должно работать.
UPDATE 3
На bugreports.qt.io я получил мнение, что это не ошибка:
You haven't actually told the build to link the openssl libraries. http://doc.qt.io/qt-5/ssl.html gives the following example:
OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked
You'll need to tweak it for your compiler and library locations of course.
На упомянутой странице документации этот пример приведен:
OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked
Я не нахожу ssl или крипто библиотеки в сборке OpenSSL, которую я скомпилировал, ни в двоичном дистрибутиве. Однако у меня есть заголовки. У меня есть только библиотеки ssleay32 и libeay32.
Команда конфигурирования делает намек, чтобы установить эти библиотеки в указанном переменный:
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"
Установив эту переменный я все еще получаю ту же ошибку.
UPDATE 5
Не совсем то, что я хотел, но шаг вперед:
Я скачал исходники для недавно (4 дня назад) выпустила Qt 5.4.2, и с что я смог создать статическую сборку с динамически связанным OpenSSL (-openssl switch).
Я по-прежнему ищу решение для статической ссылки OpenSSL. У меня все еще есть те же ошибки связывания.
Возможно, это будет ошибка Qt, тогда стоит сообщить об этом в Qt JIRA. Говоря «Qt 5.4», вы имеете в виду 5.4.0 или 5.4.1? –
@FrankOsterfeld Спасибо, я сообщил об этом как об ошибке. https://bugreports.qt.io/browse/QTBUG-46405 Я имел в виду 5.4.1, извините за неточность. –
@FrankOsterfeld Я получил ответ, что это не ошибка, но лично я еще не полностью решил это еще. Не могли бы вы предложить версию Qt для попытки? –