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.
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? –
@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ść. –
@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? –