Centos7编译安装ONVIF框架代码

21 篇文章 35 订阅
2 篇文章 0 订阅

1、前言

环境:Win10主机+VMware15.5+Centos7.9

登录用户:root

目标:采用从ONVIF官网下载的最新版本WSDL(Ver.21.12)文件,在Centos上用gsoap_2.8.119编译生成ONVIF框架代码(C++版)。

2、准备工作

2.1 准备编译环境

yum -y install bison flex

2.2 编译安装openssl

1、代码下载

/source/old/1.0.2/index.html

 2、解压缩

tar -xzf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h

3配置安装目录

./config --prefix=/usr/local/ssl

4执行命令

./config -t

5、编译安装

make
make install

6、配置环境变量

echo /usr/local/ssl/lib >> /etc/ld.so.conf
ldconfig

2.3 编译安装gsoap

1、代码下载

gSOAP Toolkit - Browse Files at SourceForge.neticon-default.png?t=M5H6https://sourceforge.net/projects/gsoap2/files/gsoap_2.8.119.zip/download

2、解压缩

unzip gsoap_2.8.119.zip
cd gsoap-2.8

3、配置编译安装

./configure --with-openssl=/usr/local/ssl --prefix=/usr/local/gsoap-2.8
make
make install

4、编译过程中,出现链接openssl库失败的问题。修改gsoap-2.8/gsoap/wsdl下的Makefile,在277行加上-ldl,然后重新编译即可通过。

3、基于gsoap生成onvif C++框架代码 

3.1 获取wsdl

可以从ONVIF官网下载最新版本的wsdlxsd文件。按照自己的需求下载相应文件。因文件依赖关系不确定,一般是全部下载,完整文件是33个。

Home - ONVIF Mandarin

 

 从官网下载的wsdl文件,可以在线和离线2种模式生成框架。因网络等问题,建议离线编译。但直接下载的wsdlxsd文件,不能直接编译,需要修改各个文件中的schemaLocationlocation标签的路径值,改法见下截图

 

 

或者可以从这里获取所有的wsdlxsd文件,里边所有路径均已修改过,可直接离线编译。

onvif_wsdl_Ver.21.12(schemaLocation和location已改为绝对路径)-C++文档类资源-CSDN下载上次提交的onvifwsdl文件,里边的schemaLocation和location没有改成绝对更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/chexlong/85030758

3.2 配置编译生成框架

1、修改/gsoap-2.8/gsoap/目录下typemap.dat文件

由于后续编译源代码需要用到 duration.c 文件,会遇到类型LONG64报错的问题,需要在typemap.dat 文件中取消以下行的注释:

xsd__duration = #import “custom/duration.h” | xsd__duration

2、拷贝到/usr/local/gsoap-2.8/bin

cp typemap.dat /usr/local/gsoap-2.8/bin/

3、将wsdl和xsd文件拷贝放到/usr/local/gsoap-2.8/ onvif_wsdl目录下

4、

cd /usr/local/ gsoap-2.8/ bin/

5、使用wsdl2h编译生成onvif.h文件

./wsdl2h -P -x -c++ -s -t ./typemap.dat -o onvif.h /usr/local/gsoap-2.8/onvif_wsdl/accesscontrol.wsdl /usr/local/gsoap-2.8/onvif_wsdl/accessrules.wsdl /usr/local/gsoap-2.8/onvif_wsdl/actionengine.wsdl /usr/local/gsoap-2.8/onvif_wsdl/advancedsecurity.wsdl /usr/local/gsoap-2.8/onvif_wsdl/analytics.wsdl /usr/local/gsoap-2.8/onvif_wsdl/authenticationbehavior.wsdl /usr/local/gsoap-2.8/onvif_wsdl/credential.wsdl /usr/local/gsoap-2.8/onvif_wsdl/deviceio.wsdl /usr/local/gsoap-2.8/onvif_wsdl/devicemgmt.wsdl /usr/local/gsoap-2.8/onvif_wsdl/display.wsdl /usr/local/gsoap-2.8/onvif_wsdl/doorcontrol.wsdl /usr/local/gsoap-2.8/onvif_wsdl/event.wsdl /usr/local/gsoap-2.8/onvif_wsdl/imaging.wsdl /usr/local/gsoap-2.8/onvif_wsdl/media.wsdl /usr/local/gsoap-2.8/onvif_wsdl/media_h265.wsdl /usr/local/gsoap-2.8/onvif_wsdl/provisioning.wsdl /usr/local/gsoap-2.8/onvif_wsdl/ptz.wsdl /usr/local/gsoap-2.8/onvif_wsdl/receiver.wsdl /usr/local/gsoap-2.8/onvif_wsdl/recording.wsdl /usr/local/gsoap-2.8/onvif_wsdl/replay.wsdl /usr/local/gsoap-2.8/onvif_wsdl/schedule.wsdl /usr/local/gsoap-2.8/onvif_wsdl/search.wsdl /usr/local/gsoap-2.8/onvif_wsdl/thermal.wsdl /usr/local/gsoap-2.8/onvif_wsdl/uplink.wsdl

6、修改生成的onvif.h及wsa5.h

因为鉴权的需要,在onvif.h头文件中加入#import "wsse.h"。

避免接下来产生框架发生错误,修改/usr/local /gsoap-2.8/ share/gsoap /import路径下的wsa5.h,将SOAP_ENV__Fault结构体名字修改为SOAP_ENV__Fault_alex。

7、使用soapcpp2生成C++代码

cd /usr/local/ gsoap-2.8 /share/gsoap
../../bin/soapcpp2  -2 -x -j -I ./import ./custom -d samples/onvif/ ../../bin/onvif.h

生成的框架代码在./samples/onvif/ 目录下

3.3 整理框架代码

1、所有的. nsmap文件都一样,任选一个,将文件名字改为wsdd.h,其它的可以删除。

2、拷贝插件文件

cp plugin/mecevp.h plugin/mecevp.c plugin/smdevp.h plugin/smdevp.c plugin/threads.h plugin/threads.c plugin/wsaapi.h plugin/wsaapi.c plugin/wsseapi.h plugin/wsseapi.c custom/duration.c custom/duration.h custom/struct_timeval.h custom/struct_timeval.c /usr/local/onvif/plugin
cp dom.cpp  /usr/local/onvif/plugin

 将以上所有.c文件改成.cpp

3、拷贝框架代码

如果是开发onvif客户端程序,则拷贝相关的soapXXXBindingProxy.h,soapXXXBindingProxy.cpp到/usr/local/onvif/linux_api_proxy

如果是开发onvif服务端程序,则拷贝相关的soapXXXBindingService.h,soapXXXBindingService.cpp到/usr/local/onvif/linux_api_service

4、引用框架代码时,添加预处理宏WITH_OPENSSL 

4、参考

编译过程中,参考了下边网友的文章,在此感谢。

  1. centos7 搭建onvif C++框架总结_sxjkl10的博客-CSDN博客
  2. Centos7 搭建Onvif C++框架(基于gSoap-2.8.106)_Gazzy1110的博客-CSDN博客
  3. ONVIF协议网络摄像机(IPC)客户端程序开发(6):使用gSOAP生成ONVIF框架代码_许振坪的博客-CSDN博客
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值