2015-05-31 2 views
10

Я пытаюсь сделать статическую сборку 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. У меня все еще есть те же ошибки связывания.

+0

Возможно, это будет ошибка Qt, тогда стоит сообщить об этом в Qt JIRA. Говоря «Qt 5.4», вы имеете в виду 5.4.0 или 5.4.1? –

+0

@FrankOsterfeld Спасибо, я сообщил об этом как об ошибке. https://bugreports.qt.io/browse/QTBUG-46405 Я имел в виду 5.4.1, извините за неточность. –

+0

@FrankOsterfeld Я получил ответ, что это не ошибка, но лично я еще не полностью решил это еще. Не могли бы вы предложить версию Qt для попытки? –

ответ

0

я как-то сделал это, чтобы работать достаточно быстро с Qt 5.3 некоторое время назад:

configure -static -debug-and-release -platform win32-msvc2012-mt -openssl -I %OPENSSL_HOME%\include -L %OPENSSL_HOME% -nomake examples -nomake tests -confirm-license -opengl es2 -skip qtwebkit -skip qtwebkit-examples -skip qttools 

Где точки -platform win32-msvc2012-мт до -mt опции компилятора Makespec поэтому приложение также использует MT. Кроме того, чтобы сделать все это работает в приложении файл .pro:

LIBS += -L$$PWD/../third-party/openssl/lib -llibeay32MT 
LIBS += -L$$PWD/../third-party/openssl/lib -lssleay32MT 

не забудьте переустановить весь каталог Qt Src между статической Qt строить попытки, из моих наблюдений всегда трудно отслеживать остатки, которые ломают все на новый запуск.

И OPENSSL_HOME переменная набор для ProjectDir \ сторонних \ OpenSSL

0

Я только что провел около суток, занимающихся этой статической сборкой, и что работа для меня:

https://github.com/alberthdev/alberthdev-misc/wiki/Building-Qt-v5.6-Statically-on-Windows

Также , вы должны заметить, что я использовал openssl-1.0.1r, алгоритм построения новой версии beacuse и имена .dll отличаются друг от друга по порядку, поэтому команда alghorithm не работает с ними, openssl-1.0.1r не устарел, поэтому все в порядке.

Также у меня были проблемы со сценарием building.bat, так вот тот, который работал на меня в Проппер образом:

..\qt-5.8.0\configure -opensource -confirm-license^ 
    -prefix C:\Qt\Qt5.8.0-static^ 
    -debug-and-release -ssl -openssl -openssl-linked -opengl dynamic^ 
    -static -static-runtime -platform win32-msvc2015^ 
    -no-compile-examples -nomake examples^ 
    -L C:\OpenSSL-win32\lib -I C:\OpenSSL-win32\include OPENSSL_LIBS="-llibeay32 -lssleay32" 

Обратите внимание, что мой «Строить» реж был из «кварты-5,8 .0 ", поэтому, пожалуйста, исправьте путь ..\qt-5.8.0\configure, чтобы он соответствовал вашему филе. Все остальные шаги были сделаны деффенетично, как сказано в инструкции по ссылке.

1

Это, как я построить Qt 5.7.1 с SSL и поддержка MySQL на Windows, используя MSVC 2013:

Убедитесь, что Perl, Python и Ruby можно найти в переменной среды PATH.

Скачать Qt из репозитория GitHub:

cd C:\Qt 
git clone https://github.com/qt/qt5.git 
cd C:\Qt\qt5 
git checkout 5.7 

Убедитесь, что проверка фиксации 36e7cff94fbb4af5d8de6739e66164c6e6873586. В это время проверка 5.7 делает именно это.

Поместите содержание ниже в qt5vars.bat, расположенный по адресу C:\Qt\qt5. Внесите изменения, если вам нужно:

@echo off 

REM Set up \Microsoft Visual Studio 2015, where <arch> is \c amd64, \c x86, etc. 
CALL "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86 

REM Edit this location to point to the source code of Qt 
SET _ROOT=C:\Qt\qt5 

SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% 

REM Uncomment the below line when using a git checkout of the source repository 
SET PATH=%_ROOT%\qtrepotools\bin;%PATH% 

REM Uncomment the below line when building with OpenSSL enabled. If so, make sure the directory points 
REM to the correct location (binaries for OpenSSL). 
SET PATH=C:\OpenSSL-Win32\bin;%PATH% 

REM When compiling with ICU, uncomment the lines below and change <icupath> appropriately: 
REM SET INCLUDE=<icupath>\include;%INCLUDE% 
REM SET LIB=<icupath>\lib;%LIB% 
REM SET PATH=<icupath>\lib;%PATH% 

REM Contrary to earlier recommendations, do NOT set QMAKESPEC. 

SET _ROOT= 

REM Keeps the command line open when this script is run. 
cmd /k 

После этого запустить этот файл и правильно инициировать хранилище:

qt5vars.bat 
perl init-repository 

Наконец, конфигурировать и компилировать библиотеку успешно (с отладкой и выпуск версии), убедитесь, что пути, на которые ссылается configure, также действительны в вашей системе:

configure -static -static-runtime -debug-and-release -ssl -openssl -openssl-linked -qt-sql-mysql -opengl dynamic -platform win32-msvc2013 -prefix C:\Qt\qt5.7-msvc2013-static -nomake tests -nomake examples -I "C:\Program Files (x86)\MySQL\MySQL Connector.C 6.1\include" -I "C:\OpenSSL-Win32\include" -L "C:\Program Files (x86)\MySQL\MySQL Connector.C 6.1\lib" -L "C:\OpenSSL-Win32\lib\VC\static" OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32 -lCrypt32" OPENSSL_LIBS_DEBUG="-lssleay32MTd -llibeay32MTd" OPENSSL_LIBS_RELEASE="-lssleay32MT -llibeay32MT" 
nmake 
nmake install 

Все до сих пор должны работать плавно и красиво. Теперь это вопрос о настройке Qt Creator для обнаружить эту новую Qt версии и создать новый набор использовать в ваших проектах:

0

Я столкнулся с той же проблемой, и я думаю, проблема заключается в том, что мы строим без SSL первых и SRC/сеть/Makefiles не регенерируется

Когда я удалил их и побежал настройки снова я получил через

Надеюсь, что это поможет

Смежные вопросы