Скомпилируйте gsoap-onvif solve #error: «M_ASN1_STRING_data» не было объявлено в этой области - PullRequest
2 голосов
/ 28 марта 2019

Я пытаюсь скомпилировать проект gsoap-onvif здесь: https://github.com/xris-hu/gsoap-onvif

Я вызываю файл make, и он выдает некоторые ошибки.Работая над Ubuntu 18.10, я решил некоторые из них, установив зависимости: g ++, gsoap, libssl-dev.К сожалению, у меня есть ошибка, которую я не могу понять:

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

Кто-то знает, как решить эту проблему?

ОБНОВЛЕНИЕ: версия gSOAP, используемая в этом проекте, довольно старая и может не работатьс более новыми версиями OpenSSL.Проект может быть мертвым ... Кто-нибудь знает альтернативу?

АЛЬТЕРНАТИВА: Вот лучшее решение, которое я нашел: https://github.com/suresecure/onvifcpplib Эта библиотека также используется в https://sourceforge.net/projects/onvifmanager/

Ответы [ 3 ]

1 голос
/ 29 марта 2019

В Python очень хорошим решением является следующий проект на GitHub:

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

альтернатива для Python 2.x:

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

1 голос
/ 28 марта 2019

Похоже, что это OpenSSL / gsoap isseus, попробуйте обновить программное обеспечение с новой версией stdsoap2.cpp.

https://github.com/Sufi-Al-Hussaini/onvif-gsoap-by-example/issues/1

0 голосов
/ 01 апреля 2019

Вот патч, который я успешно использовал, который основан на более новых версиях gSOAP 2.8, которые используют следующий исходный код:

#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));
              }

Этот патч работает со старыми версиями gSOAP.

Это изменение выполняется для stdsoap2.c и stdsoap2.cpp в функции tcp_connect(), что довольно долго.

...