2
votes

Compilez gsoap-onvif resolution #error: "M_ASN1_STRING_data" n'a pas été déclaré dans cette portée

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 >


2 commentaires

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.


3 Réponses :


1
votes

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


1 commentaires

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.



0
votes

En Python, une solution très intéressante est le projet suivant sur GitHub:

https://github.com/FalkTannhaeuser/python-onvif-zeep

une alternative à python 2.x est:

https://github.com/quatanium/python-onvif .


1 commentaires

Ce n'est pas une solution au problème de compilation.



0
votes

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.


2 commentaires

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.