注意:以上操作命令是在gsoap-2.8/gsoap 路径下执行的
编译修改 typemap.dat
1. 去掉
xsd__duration = #import "custom/duration.h" | xsd__duration 前面的注释
添加如下代码:
新建一个文件夹,用于存放生成的文件
mkdir -p samples/onvif
执行wsdl2h命令,生成onvif.h头文件(如果想生成C++代码,去掉-c即可)
./wsdl2h -c -x -t typemap.dat -o samples/onvif/onvif.h http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl http://www.onvif.org/onvif/ver10/receiver.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl
生成onvif框架代码
./soapcpp2 -2 -x -c samples/onvif/onvif.h -Iimport
拷贝对应文件到onvif文件夹下
cp soapC.c soapClient.c soapH.h soapStub.h wsdd.nsmap dom.c custom/duration.c custom/duration.h plugin/mecevp.c plugin/mecevp.h plugin/smdevp.c plugin/smdevp.h stdsoap2.c stdsoap2.h plugin/threads.c plugin/threads.h import/wsa5.h plugin/wsaapi.c plugin/wsaapi.h plugin/wsseapi.c plugin/wsseapi.h custom/struct_timeval.c custom/struct_timeval.h samples/onvif/
打开stdsoap2.c,添加头文件
#include "wsdd.nsmap"
至此onvif框架代码生成完成
注意:
如果出现如下错误
duration.c(61,28): error C2059: 语法错误:“<parameter-list>”
说明gsoap在编译onvif框架的时候某些地方不正确,检查wsdl的网址是否有重复,复制c或.h文件的是是否是全的,最重要的是,文章开始修改typemap.dat的地方是否漏掉