J'essaye de compiler le projet gsoap-onvif ici: https: // github. com / xris-hu / gsoap-onvif
J'appelle le fichier make et il génère des erreurs. En travaillant sur ubuntu 18.10, j'ai résolu certains d'entre eux en installant les dépendances: g ++, gsoap, libssl-dev. Malheureusement, j'ai une erreur que je ne comprends pas:
admin@UbuntuOS:~/Desktop/gsoap-onvif-master$ make g++ -c -Wall -g -w -fPIC -DWITH_NONAMESPACES -fno-use-cxa-atexit -fexceptions -DWITH_DOM -DWITH_OPENSSL -DSOAP_DEBUG -I./include -I. stdsoap2.cpp -o stdsoap2.o stdsoap2.cpp: In function âint tcp_connect(soap*, const char*, const char*, int)â: stdsoap2.cpp:4406:52: error: âM_ASN1_STRING_dataâ was not declared in this scope { if (!soap_tag_cmp(host, (const char*)M_ASN1_STRING_data(name))) ^~~~~~~~~~~~~~~~~~ stdsoap2.cpp:4406:52: note: suggested alternative: âASN1_STRING_dataâ { if (!soap_tag_cmp(host, (const char*)M_ASN1_STRING_data(name))) ^~~~~~~~~~~~~~~~~~ ASN1_STRING_data make: *** [Makefile:22: stdsoap2.o] Error 1
Quelqu'un sait comment résoudre ce problème?
UPDATE: la version de gSOAP utilisée dans ce projet est assez ancien et peut ne pas fonctionner avec les nouvelles versions d'OpenSSL. Le projet pourrait être mort ... Quelqu'un connaît-il une alternative?
ALTERNATIVE: Voici la meilleure solution que j'ai trouvée: https://github.com/suresecure / onvifcpplib Cette bibliothèque est également utilisée dans https://sourceforge.net/projects/onvifmanager/ p >
3 Réponses :
Il semble que c'est un produit OpenSSL / gsoap, essayez de mettre à jour le logiciel avec une nouvelle version de stdsoap2.cpp.
https://github.com/Sufi -Al-Hussaini / onvif-gsoap-by-example / issues / 1
MISE À JOUR: la version de gSOAP utilisée dans ce projet est assez ancienne et peut ne pas fonctionner avec les nouvelles versions d'OpenSSL.
En Python, une solution très intéressante est le projet suivant sur GitHub:
une alternative à python 2.x est:
Ce n'est pas une solution au problème de compilation.
Voici un correctif que j'ai utilisé avec succès, basé sur les nouvelles versions de gSOAP 2.8 qui utilisent le code source suivant:
#if OPENSSL_VERSION_NUMBER < 0x10100000L const char *tmp = (const char*)ASN1_STRING_data(name); #else const char *tmp = (const char*)ASN1_STRING_get0_data(name); #endif if (!soap_tag_cmp(host, tmp)) { ok = 1; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL: host name %s match with certificate subject %s\n", host, tmp)); }
Ce correctif fonctionne avec les anciennes versions de gSOAP. p>
Cette modification est apportée à stdsoap2.c et stdsoap2.cpp dans la fonction tcp_connect ()
, qui est assez longue.
Quelle version d'openssl avez-vous utilisée? Et dans quel fichier je dois mettre le code que vous avez posté?
Cette modification est apportée à stdsoap2.c et stdsoap2.cpp dans la fonction tcp_connect (), ce qui est assez long.
Il se peut que votre version d’openssl installée soit ancienne.
J'ai la dernière version (v1.1.1) sur Ubuntu 18.10, installée via apt-get.