Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译gsoap onvif solve#error:‘;M#ASN1#U字符串#U数据’;未在此范围中声明_C++_Openssl_Gsoap_Onvif - Fatal编程技术网

C++ 编译gsoap onvif solve#error:‘;M#ASN1#U字符串#U数据’;未在此范围中声明

C++ 编译gsoap onvif solve#error:‘;M#ASN1#U字符串#U数据’;未在此范围中声明,c++,openssl,gsoap,onvif,C++,Openssl,Gsoap,Onvif,我试图在这里编译gsoap onvif项目: 我调用make文件,它会抛出一些错误。在Ubuntu18.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 -DWIT

我试图在这里编译gsoap onvif项目:

我调用make文件,它会抛出一些错误。在Ubuntu18.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一起使用。 这个项目可能会死。。。有人知道另一种选择吗

备选方案:以下是我找到的最佳解决方案:
此库也用于

如果它是OpenSSL/gsoap ISSUS,请尝试使用新版本的stdsoap2.cpp更新软件


在Python中,一个非常好的解决方案是GitHub上的以下项目:

python 2.x的另一种选择是:


下面是我成功使用的补丁,它基于使用以下源代码的较新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));
              }
#如果OPENSSL_版本号<0x10100000L
常量字符*tmp=(常量字符*)ASN1_字符串_数据(名称);
#否则
常量字符*tmp=(常量字符*)ASN1\u字符串\u get0\u数据(名称);
#恩迪夫
如果(!soap_标记_cmp(主机,tmp))
{
ok=1;
DBGLOG(测试,SOAP_消息(fdebug,“SSL:主机名%s与证书主题%s\n匹配”,主机,tmp));
}
此修补程序适用于较旧的gSOAP版本


此编辑是对函数
tcp_connect()
中的stdsoap2.c和stdsoap2.cpp进行的,这相当长。

可能是您安装的openssl版本很旧。我在Ubuntu 18.10上有最新版本(v1.1.1),通过apt-get.UPDATE安装:此项目中使用的gSOAP版本非常旧,可能无法与较新版本的OpenSSL一起使用。您使用了哪个版本的OpenSSL?我必须将您发布的代码放在哪个文件中?此编辑是对函数tcp_connect()中的stdsoap2.c和stdsoap2.cpp进行的,它相当长。这不是编译问题的解决方案。