Linux下SOAP工具生成ONVIF框架

来源:互联网 发布:java怎么定义函数 编辑:程序博客网 时间:2024/05/18 02:28

Linux下SOAP工具生成ONVIF框架

一、相关地址

Gsoap下载地址1https://zh.osdn.net/projects/sfnet_gsoap2/releases/

Gsoap下载地址2https://sourceforge.net/projects/gsoap2/

Gsoap安装说明:https://www.genivia.com/downloads.html

ONVIF官网WSDL:https://www.onvif.org/profiles/specifications/

ONVIF官网APIhttps://www.onvif.org/onvif/ver20/util/operationIndex.html

文章出处:http://blog.csdn.net/zerolity/article/details/76442564

二、linux下安装

1、soap下载最新soap,此处gsoap2.8.50版本

2、在linux下解压,然后进入到解压后的目录gsoap-2.8;

① ./configure

② make

③ sudo make install

如果以上失败,请验证您是否拥有:

  • 安装了Automake工具(make和GNU m4)
  • Bison从www.gnu.org/software/bison或Yacc 安装
  • Flex从flex.sourceforge.net安装
  • 来自www.openssl.org的 OpenSSL www.gnu.org/software/gnutls的 GNUTLS,或者您必须禁用SSL
  • 可选的Zlib支持从www.zlib.net压缩
三、生成ONVIF框架
1、建立一个新目录
①把/usr/local/bin/ 下刚才生成的wsdl2h 和 soapcpp2拷贝到当前目录下
②把gsoap-2.8/gsoap/typemap.dat也拷贝到当前目录下
③把gsoap-2.8/gsoap/WS/WS-Discovery.wsdl拷贝至当前目录下
2、执行命令,生成onvif.h:
两种方法:在线生成和离线生成
a、在线生成快捷,但是,一般网络不好的会断开。此处小方法解决:自己手机开个wifi给笔记本。速度杠杠的!(我用的这种)
命令:./wsdl2h -o onvif.h -c -s -t ./typemap.dat http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl 
https://www.onvif.org/ver10/events/wsdl/event.wsdl https://www.onvif.org/ver10/pacs/accesscontrol.wsdl https://www.onvif.org/ver10/pacs/accessrules.wsdl https://www.onvif.org/ver10/actionengine.wsdl https://www.onvif.org/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl http://www.onvif.org/ver10/credential/wsdl/credential.wsdl https://www.onvif.org/ver10/deviceio.wsdl https://www.onvif.org/ver10/display.wsdl https://www.onvif.org/ver10/pacs/doorcontrol.wsdl https://www.onvif.org/ver20/imaging/wsdl/imaging.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl https://www.onvif.org/ver20/media/wsdl/media.wsdl https://www.onvif.org/ver10/provisioning/wsdl/provisioning.wsdl https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl https://www.onvif.org/ver10/receiver.wsdl https://www.onvif.org/ver10/recording.wsdl https://www.onvif.org/ver10/search.wsdl https://www.onvif.org/ver10/replay.wsdl http://www.onvif.org/ver10/schedule/wsdl/schedule.wsdl https://www.onvif.org/ver10/thermal/wsdl/thermal.wsdl  https://www.onvif.org/ver10/analyticsdevice.wsdl
b、离线,到onvif官网wsdl去把所有的或者你想要的,右键,下载下来。
(这个注意还要下xsd文件,下了还要改wdml里面schemaLocation元素,把他的路径改为你下载的xsd文件位置,我弄过一次,巨麻烦。
还是建议在线生成方便。)
命令:./wsdl2h -o onvif.h -c -s -t ./typemap.dat *wsdl

生成过程有错的,网上百度,这儿是一番风顺,估计版本新的原因吧。
3、生成框架文件
①生成onvif.h成功后,打开生成的onvif.h 在#import 那加入一行代码 #import "wsse.h"用于鉴权
运行:./soapcpp2 -2 -c -x onvif.h -I ../gsoap-2.8/gsoap/:../gsoap-2.8/gsoap/import/:../gsoap-2.8/gsoap/custom/:../gsoap-2.8/gsoap/plugin/
-I 后面的gsoap路径自己对应修改。

如果直接生成对应C的库文件会发生重复定义错误,可以修改该文件。

wsa5.h(288): **ERROR**: remote method name clash: struct/class 'SOAP_ENV__Fault' already declared at line 274

打开文件gsoap_2.8.16/gsoap-2.8/gsoap/import/ wsa5.h

将277行int SOAP_ENV__Fault修改为int SOAP_ENV__Fault_alex

或是将这个结构体直接注释的方式(别用if 0方法注释,还是会报错),最后的结果是,都可以使用。

同时上一步生成的onvif.h文件中没有打开wsse.h, 导致最后生成代码中SOAP_ENV__Header 结构体中缺少定义 wsse__Security数据段,无法进行鉴权命令。



生成成功!
所有扩展名nsmap都是一样的,留下一个更名为wsdd.nsmap,其余nsmap删掉。再把soap-2.8下面的一些文件拷贝过来,最后所需文件如下所示:
duration.c  soapClient.c  soapH.h   soapStub.h  stdsoap2.h   wsdd.nsmap  duration.h  soapC.c  soapServer.c stdsoap2.c   

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 1岁吃母乳不吃饭怎么办 5个月宝宝黏妈妈怎么办 九个月宝宝不爱吃饭怎么办 20个月宝宝吐了怎么办 十个月的宝宝消化不好怎么办 两岁宝宝不爱喝水怎么办 两岁宝宝不爱喝水吃饭怎么办 两岁的宝宝不爱喝水怎么办 宝宝不爱吃饭不爱喝水怎么办 一多半宝宝爱喝水 不爱吃饭怎么办 1岁宝宝不爱吃饭喝水怎么办 两岁小宝宝不爱吃饭怎么办 4个月小宝宝咳嗽怎么办 3个月小宝宝咳嗽怎么办 2个月小宝宝咳嗽怎么办 8的岁儿童腿不直怎么办 作业盒子选错年级怎么办 两岁x型腿怎么办 绿萝叶子有水滴怎么办 打游戏变菜了怎么办 车被记号笔画了怎么办 水溶性彩铅受潮了怎么办 马克笔颜色涂深了怎么办 染发膏染眉毛了怎么办 用电容笔画画手有触感怎么办 CAD画图线性数字不居中怎么办 3d立体画笔堵塞怎么办 龋齿树脂填充老化后怎么办 小孩补过的牙疼怎么办 颜料弄到墙纸上怎么办 4岁的宝宝不爱涂色怎么办 oppo手机截图存不到相册怎么办 做的ih5保存不了怎么办 小偷偷东西发现后逃跑了怎么办? 网上有人传迷信诅咒怎么办 颜料粘在衣服上怎么办 家里有小偷撬锁怎么办 在家有人在撬门怎么办 6个月的宝宝腹泻怎么办 六个月大的宝宝拉肚子怎么办 六个月宝宝着凉拉肚子怎么办