使用gsoap编译生成onvif源码C/C++文件

版权声明:本文为博主原创文章,转载请注明原地址。 https://blog.csdn.net/Jacob_job/article/details/79447500

1、gsoap工具编译与安装

需要先安装openssl

sudo apt-get install openssl 
sudo apt-get install libssl-dev

自行下载gsoap源码并解压,进入gsoap源码下

./config
make
sudo make install 

安装成功后可以使用wsdl2h 和soapcpp2命令
wsdl2h 命令用于生成头文件
soapcpp2 命令用于生成源码

2、开始生成源码

新建一个目录,如onvif_code,把源码目录中的typemap.dat拷贝到此目录

2.1 生成onvif.h文件

需要下载哪些wsdl、xsd文件,请根据项目实际需求选择,本文只是介绍编译步骤。

在线生成onvif.h文件

注意,如果在线下载的网络不佳,建议使用本地生成的方法。
wsdl2h的参数说明,其中-c表示生成的源码是C语言,-c++表示生成C++,其他参数说明自行通过wsdl2h -h命令查看。

wsdl2h -o onvif.h -c -s -t ./typemap.dat 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/ver10/event/wsdl/event.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl http://www.onvif.org/onvif/ver10/receiver.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl http://www.onvif.org/onvif/ver10/replay.wsdl http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl http://www.onvif.org/ver10/actionengine.wsdl http://www.onvif.org/ver10/pacs/accesscontrol.wsdl http://www.onvif.org/ver10/pacs/doorcontrol.wsdl
本地生成onvif.h文件

使用在线生成时经常会出错,建议先把相关文件逐个下载下来后本地生成onvif.h。
在onvif_code文件夹中新建wsdl目录,把上述文件全部下载下来。

wget http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/events/wsdl/event.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl http://www.onvif.org/onvif/ver20/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl http://www.onvif.org/onvif/ver10/receiver.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/replay.wsdl http://www.onvif.org/onvif/ver10/thermal/wsdl/thermal.wsdl http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl http://www.onvif.org/ver10/actionengine.wsdl http://www.onvif.org/ver10/pacs/accesscontrol.wsdl http://www.onvif.org/ver10/pacs/doorcontrol.wsdl http://www.onvif.org/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl http://www.onvif.org/ver10/accessrules/wsdl/accessrules.wsdl http://www.onvif.org/ver10/credential/wsdl/credential.wsdl http://www.onvif.org/ver10/schedule/wsdl/schedule.wsdl http://www.onvif.org/onvif/ver10/schema/onvif.xsd http://www.onvif.org/ver10/pacs/types.xsd http://www.w3.org/2005/08/addressing/ws-addr.xsd http://docs.oasis-open.org/wsn/t-1.xsd http://docs.oasis-open.org/wsn/b-2.xsd http://docs.oasis-open.org/wsrf/bf-2.xsd http://www.w3.org/2001/xml.xsd http://docs.oasis-open.org/wsn/bw-2.wsdl http://docs.oasis-open.org/wsrf/rw-2.wsdl http://docs.oasis-open.org/wsrf/r-2.xsd

编译过程可能会提示某个xsd文件没找到,那是当前编译的wsdl文件中包含该xsd文件时路径与本地路径不一致,修改wsdl文件中的该路径就好。

wsdl2h -o onvif.h -c -s -t ./typemap.dat wsdl/devicemgmt.wsdl wsdl/event.wsdl wsdl/display.wsdl wsdl/deviceio.wsdl wsdl/imaging.wsdl wsdl/media.wsdl wsdl/ptz.wsdl wsdl/receiver.wsdl wsdl/recording.wsdl wsdl/search.wsdl wsdl/replay.wsdl wsdl/thermal.wsdl wsdl/analytics.wsdl wsdl/analyticsdevice.wsdl wsdl/actionengine.wsdl wsdl/accesscontrol.wsdl wsdl/doorcontrol.wsdl wsdl/advancedsecurity.wsdl wsdl/accessrules.wsdl wsdl/credential.wsdl wsdl/schedule.wsdl

2.2 生成源文件

soapcpp2的具体参数说明可以通过soapcpp2 -h查看,-c生成C语言,-c++生成C++,-C只生成client源码,-S只生成server源码,-x不生成XML文件

生成C源文件
soapcpp2 -c onvif.h -x -I gsoap源码的import文件夹路径 -I gsoap源码的gsoap文件夹路径
生成C++源文件
soapcpp2 -c++ onvif.h -x -I gsoap源码的import文件夹路径 -I gsoap源码的gsoap文件夹路径

至此onvif源码生成完毕,2.1步骤生成的onvif.h文件的作用只是用于生成源码的中间文件,不需要放入onvif源码的工程中。

猜你喜欢

转载自blog.csdn.net/Jacob_job/article/details/79447500