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.
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. –
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