2016-02-18 19 views
6

Moja głowa wkrótce wybuchnie ... Chcę skompilować qt z opcją -openssl-linked, aby biblioteki openssl były połączone z bibliotekami qt. Próbowałem już wiele opcji i moje wyjście podczas kompilacji jest zawsze:Błąd podczas kompilowania Qt5 z połączonym openssl

ssl/qsslcertificate_openssl.cpp: In function ‘uint qHash(const QSslCertificate&, uint)’: 
ssl/qsslcertificate_openssl.cpp:63:30: error: invalid use of incomplete type ‘X509 {aka struct x509_st}’ 
    return qHashBits(x509->sha1_hash, SHA_DIGEST_LENGTH, seed); 
         ^
In file included from /usr/local/include/openssl/crypto.h:131:0, 
      from /usr/local/include/openssl/comp.h:59, 
      from /usr/local/include/openssl/ssl.h:148, 
      from ../../include/QtNetwork/5.5.1/QtNetwork/private/../../../../../src/network/ssl/qsslcontext_openssl_p.h:53, 
      from ../../include/QtNetwork/5.5.1/QtNetwork/private/qsslcontext_openssl_p.h:1, 
      from ssl/qsslsocket_p.h:55, 
      from ssl/qsslsocket_openssl_p.h:63, 
      from ssl/qsslsocket_openssl_symbols_p.h:64, 
      from ssl/qsslcertificate_openssl.cpp:35: 
/usr/local/include/openssl/ossl_typ.h:160:16: note: forward declaration of ‘X509 {aka struct x509_st}’ 
typedef struct x509_st X509; 

Skompilowałem openssl i próbował kompilacji qt uboczny moich skompilowane biblioteki:

OPENSSL_LIBS='-L/opt/openssl_build/lib -lssl -lcrypto' ./configure -prefix /opt/qt5.5.1_linux_staticssl -opensource -confirm-license -release -nomake examples -nomake tests -static -openssl -no-opengl -no-libpng -no-pulseaudio -no-linuxfb -no-gif -no-gstreamer -no-gtkstyle -no-directfb -no-gui -no-eglfs -no-glib -I /opt/openssl_build/include/openssl -L /opt/openssl_build/lib -no-xcb 

wiem błąd wydaje się być ładowanie starą OpenSSL biblioteki, ale już próbowałem zmienić tę ścieżkę, aby nie mogła ich znaleźć i zmusić do załadowania nowych. Nie wiem, co jeszcze mogę zrobić. Wersja Qt to 5.5.1 openssl 1.0.1 i g ++ 5.2.

+2

skąd wziąłeś z OpenSSL? W oddziale OpenSSL_1_0_1-stable (na przykład wydanie 1.0.1r), 'struct x509_st' jest zdefiniowany w publicznym nagłówku' x509.h'. Na bieżącym wzorcu jest on zdefiniowany w wewnętrznym nagłówku 'internal/x509_int.h', co może spowodować problem. –

+0

Zadziałało. Kompilowałem główną gałąź Git's openssl, kiedy skompilowałem 1.0.1 i wypróbowałem qt z nim działało. Musiałem tymczasowo zmienić ścieżkę do bibliotek openssl systemu, więc qt musiał użyć skompilowanego 1.0.1. Dzięki – nicolaszb

Odpowiedz

5

Musiałem zbudować Qt z wersją openssl 1.0.1, nie wiem, czy działa z wersją 1.0.2. Musiałem zmienić ścieżkę bibliotek openssl systemu, tak aby Qt było zmuszone użyć tych, które stworzyłem. Linie do kompilacji OpenSSL uruchomiony w katalogu źródłowego:

./config --prefix=/opt/openssl_build_stable -shared 
make 
make test 
sudo make install 

Moja linia conf dla Qt:

OPENSSL_LIBS='-L/opt/openssl_build_stable/lib -lssl -lcrypto' ./configure -prefix /opt/qt5.5.1_linux_staticssl -opensource -confirm-license -release -nomake examples -nomake tests -static -openssl-linked -I /opt/openssl_build_stable/include/openssl -L /opt/openssl_build_stable/lib 

Dzięki Simon-Warta

+0

Powinien również działać z wersją 1.0.2 zgodnie z tą ładną dokumentacją: https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes (Patrz 5.1 "Nie działa -> Qt") – Anonymous

Powiązane problemy