2016-02-18 14 views
6

La mia testa esploderà presto ... Voglio compilare qt con -openssl-linked in modo che le librerie di openssl vengano collegate nelle librerie qt. Ho già provato molte opzioni e la mia uscita durante la compilazione è sempre:Errore nella compilazione di Qt5 con openssl linked

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; 

I OpenSSL compilato e provato la compilazione qt passando le mie librerie compilate:

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 

So che l'errore sembra essere il caricamento del vecchio openssl librerie ma ho già provato a cambiare quel percorso in modo che non possa trovarli e costringerlo a caricare quelli nuovi. Non so cos'altro fare. La versione di Qt è 5.5.1 openssl 1.0.1 e g ++ 5.2.

+2

Dove hai preso OpenSSL da? Nel ramo OpenSSL_1_0_1-stable (ad es. Versione 1.0.1r), 'struct x509_st' è definito nell'intestazione pubblica' x509.h'. Sul master corrente è definito in un'intestazione interna 'internal/x509_int.h', che potrebbe causare il problema. –

+0

Ha funzionato. Stavo compilando il ramo master di git di openssl, quando ho compilato la 1.0.1 e ho provato che qt funzionava. Ho dovuto modificare temporaneamente il percorso delle librerie openssl del sistema in modo che qt dovesse usare 1.0.1 che ho compilato. Grazie – nicolaszb

risposta

5

Ho dovuto creare Qt con la versione 1.0s di openssl, non so se funziona con 1.0.2. Ho dovuto cambiare il percorso delle librerie openssl del sistema in modo che Qt fosse costretto a usare quelli che ho creato. Lines per compilare OpenSSL in esecuzione directory della sorgente:

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

La mia linea conf per 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 

Grazie a Simon-Warta

+0

Dovrebbe funzionare anche con 1.0.2 secondo questa bella documentazione: https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes (Vedi 5.1 "Non funziona più -> Qt") – Anonymous

Problemi correlati