2015-05-31 12 views
10

Próbuję utworzyć statyczną kompilację Qt (wersja 5.4.1) z obsługą OpenSSL. Skonfigurowałem go w następujący sposób:Statyczna kompilacja błędu Qt Qt5Network linking

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 

Katalogi include i lib są poprawne. Dostaję mnóstwo błędów łączenia w 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 

Udało mi się stworzyć statyczną kompilację wcześniej bez obsługi OpenSSL. Komunikaty o błędach sugerują również, że problem jest związany z OpenSSL.

Czy ktoś ma pomysł, aby rozwiązać ten problem?

UPDATE

Konfiguracje te wytwarzają ten sam błąd:

Konfiguracja 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 

Konfiguracja 2:

configure -opensource -release -c++11 -static -platform win32-msvc2013 
-openssl -I C:\OpenSSL-Win32\include -L C:\OpenSSL-Win32 
-nomake examples -nomake tests 

UPDATE 2

Próbowałem także śledzić świetny samouczek w qBittorrent wiki i otrzymałem te same błędy.

Jeśli rzeczywiście jest to błąd Qt, jak zasugerował Frank w his comment, byłoby również bardzo przydatne, gdyby ktoś mógł zasugerować ostatnią wersję Qt, z którą to powinno działać.

UPDATE 3

Na bugreports.qt.io Otrzymałem opinię, że to nie jest błąd:

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.

Na określoną stronie dokumentacji tego przykładem jest podana:

OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked 

Nie znajduję bibliotek ssl ani bibliotek kryptograficznych w skompilowanej kompilacji OpenSSL ani w dystrybucji binarnej. Mam jednak nagłówki. Mam tylko biblioteki ssleay32 i libeay32.

Polecenie configure robi aluzję do ustawiania tych bibliotek do wspomnianej zmiennej:

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" 

Ustawienie tej zmiennej I wciąż te same błędy.

UPDATE 5

Nie dokładnie to, co chciałem, ale to krok naprzód:

Pobrałem źródła dla niedawno (4 dni temu) wydany Qt 5.4.2 oraz z że udało mi się stworzyć statyczną kompilację z dynamicznie połączonym OpenSSL (przełącznik -openssl).

Wciąż szukam rozwiązania, aby połączyć statycznie OpenSSL. Nadal mam te same błędy linkowania.

+0

Może to być błąd Qt, więc warto go zgłosić w Qt JIRA. Mówiąc "Qt 5.4", masz na myśli 5.4.0 lub 5.4.1? –

+0

@FrankOsterfeld Dziękuję, zgłosiłem to jako błąd. https://bugreports.qt.io/browse/QTBUG-46405 Mam na myśli 5.4.1, przepraszam za nieścisłość. –

+0

@FrankOsterfeld Otrzymałem odpowiedź, że to nie jest błąd, ale osobiście jeszcze nie rządziłem. Czy mógłbyś zaproponować wersję Qt do wypróbowania? –

Odpowiedz

0

ja jakoś go do pracy dość szybko z Qt 5.3 Jakiś czas temu:

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 

Gdzie punkty -platform win32-msvc2012-MT do -MT opcję kompilatora makespec więc aplikacja wykorzystuje również MT. Również, aby to wszystko działa w app .pro pliku:

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

Pamiętaj, aby ponownie zainstalować cały katalog Qt Src pomiędzy Qt zbudować statycznych prób, z moich obserwacji nie zawsze trudne do śledzenia, które rozkładają resztki na wszystko nowy bieg.

I OPENSSL_HOME zmienny zestaw do ProjectDir \ innej firmy \ openssl

0

Właśnie spędziliśmy dzień do czynienia z tym statycznej konstrukcji, a co praca jest dla mnie:

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

także , musisz zauważyć, że użyłem openssl-1.0.1r, ponieważ nowa wersja algorytmu budowania i nazwy .dll różnią się od jednego w instrukcjach, więc algorytmy instrukcji nie działają z nimi, openssl-1.0.1r nie jest przestarzałe, więc jest w porządku.

Również miałem problemy ze skryptem building.bat, więc o tym, który pracował dla mnie w sposób Właściwa:

..\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" 

odnotować, że mój „Build” reż było z „qt-5,8 .0 "dir, więc proszę, popraw ścieżkę ..\qt-5.8.0\configure, aby pasowała do twojej filestruktury. Wszystkie inne kroki zostały wykonane w sposób zdecy- dowanie, zgodnie z instrukcją pod linkiem.

1

ten sposób buduję Qt 5.7.1 z SSL i MySQL wsparcie na systemie Windows za pomocą MSVC 2013:

Upewnij się, że Perl, Python i Ruby znajdują się w zmiennej środowiskowej PATH.

pobierania Qt z repozytorium github:

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

Upewnij się do kasy popełnić 36e7cff94fbb4af5d8de6739e66164c6e6873586. W tym momencie sprawdzanie 5.7 właśnie to robi.

Umieść zawartość poniżej w qt5vars.bat zlokalizowanym pod numerem C:\Qt\qt5. Dokonanie zmian, jeśli trzeba:

@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 

potem wykonać ten plik i prawidłowo zainicjować repozytorium:

qt5vars.bat 
perl init-repository 

Wreszcie, aby skonfigurować i skompilować bibliotekę pomyślnie (z debugowania i zwolnij wersje) upewnij się, że ścieżki odwołuje configure obowiązują również w systemie: powinien

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 

Wszystko do tej pory przebiega sprawnie i pięknie. Teraz jest to kwestia konfiguracji Qt Creator do wykryć nowego Qt w wersji i utworzyć nowy zestaw użyć w swoich projektach:

0

wpadłem na ten sam problem i myślę, że problemem jest to, że możemy budować bez ssl pierwszy i src/network/Makefile nie są regenerowane

Kiedy Usunąłem je skonfigurować i pobiegł znowu mam przez

Hope To pomaga