2.1 修改typemap.dat文件
由于使用gSOAP版本为2.8.102,需要对typemap.dat文件进行修改,否则会在后面动态库生成中提示错误,错误如下所示:
解决该错误的方法将typemap.dat文件中的
# xsd__duration = #import "custom/duration.h" | xsd__duration
注释内容开启,修改后如下图所示:
2.2 生成WSDL相应的头文件
使用cd /opt/gsoap-2.8/gsoap/命令,进入gsoap目录。
使用sudo mkdir -p samples/onvif命令,创建onvif目录,用于存储生成的框架代码。
使用sudo wsdl2h -P -x -c -s -t ./typemap.dat -o samples/onvif/onvif.h https://www.onvif.org/ver10/network/wsdl/remotediscovery.wsdl https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl命令,得到onvif.h头文件。
操作如下图所示:
2.3 添加鉴权(认证)引用
有些ONVIF接口调用时需要携带认证信息,要使用soap_wsse_add_UsernameTokenDigest函数进行授权,所以要在onvif.h头文件开头加入#import "wsse.h",内容如下所示:
2.4 生成框架代码
使用sudo soapcpp2 -2 -C -L -c -x -I import:custom -d samples/onvif/ samples/onvif/onvif.h命令,根据onvif.h文件生成框架,如下图所示:
上图中出现错误提示wsa5.h(290): **ERROR**: service operation name clash: struct/class 'SOAP_ENV__Fault' already declared at wsa.h:278,可从这个内容中知道'SOAP_ENV__Fault变量重复定义。
解决方法是修改import\wsa5.h文件,将int SOAP_ENV__Fault修改为int SOAP_ENV__Fault_dn,修改内容如下图所示:
再次使用sudo soapcpp2 -2 -C -L -c -x -I import:custom -d samples/onvif/ samples/onvif/onvif.h命令,执行结果如下图:
通过以上操作步骤,生成soapC.c、soapClient.c、soapH.h、soapStub.h 、wsdd.nsmap等框架代码文件。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。