centos7 搭建onvif C++框架总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

@[TOC]centos7 搭建onvif C++框架总结


前言

本文记录了centos7 搭建onvif C++框架的过程及遇到问题的解决方式。
为了封装onvif库,gsoap安装了删除,删除了安装,各种问题;
尤其重要的一点,在使用前,务必明确gsoap的版本以及需要onvif的c++源码,还是C源码;

一、准备资源

  1. 安装Bison
yum -y install bison
  1. 安装Flex
yum -y install flex
  1. 安装OpenSSL
    我采用源码编译安装的方式:
    官网:https://www.openssl.org/
    版本:openssl-1.0.2h
    安装详见openssl-1.0.2h/INSTALL说明
    备注:
    1、 我采用默认安装路径/usr/local/ssl/,这个路径等下编译gSOAP源码时会用到;
    2、 Openssl 系统自带有;查询 openssl version;
    强烈建议
    openssl源码安装,后续基于oncvif的源码开发时需要openssl的的库,源码安装很清晰的知道openssl的库在什么地方(这个好坑,之前那一版openssl是系统自己按照的,在cmake编译的时候找不到libssl.a libcrypto.a 在哪)。
    openssl的安装之前仔细阅读以下blog:
    https://www.cnblogs.com/rxbook/p/9367725.html
    https://cloud.tencent.com/developer/article/1632995?from=information.detail.linux%E5%8D%B8%E8%BD%BDopenssl
$ echo /usr/local/ssl/lib >> /etc/ld.so.conf
$ ldconfig
  1. 下载gSOAP(从gSOAP官网下载gSoap_2.8.106)
cd gsoap-2.8
$ ./configure --with-openssl=/usr/local/openssl --prefix=/usr/local/gsoap_soft/gsoap-2.8/install
$ make
$ make install

–with-openssl:后面的值是openssl的安装位置
–prefix:后面的值是 gsoap的安装位置,方便后面生成框架代码;

使用这种编译方式,很大概率上出现 openssl的库无法链接;解决办法:
可以修改gsoap-2.8/gsoap/wsdl下的Makefile,在278行加上-ldl;
详见blog:https://blog.csdn.net/azhangyi188/article/details/51063880/

二、基于gSOAP生成C++框架

1.下载wsdl

https://www.onvif.org/profiles/specifications 鼠标右键另存为即可下载。
修改wsdl文件中的“schemaLocation”和“location”的值;wsdl可以看成xml文件方便理解,其中“schemaLocation”和“location”的值都是相对地址,由于已经下载在本地所以需要耐心且细心的修改为,其值得绝对地址;
另外本不建议直接用其网址进行,编译;试过,编译不过,原因未知;
如下图所示:
绝对地址的修改方式时,请注意前面的“namespace”对应的网址,按照前面的网址复制到后面来即可
特殊情况:
由于所有的wsdl都已经下载,在deviceio.wsdl中的 devicemgmt.wsdl 已经下载在本地,其修改方式后的结果如下:
在这里插入图片描述
修改后的资源如下:
WSDL:https://download.csdn.net/download/sxjkl10/14648527

2.执行wsdl2h

操作步骤:

  1. 修改gsoap目录下的typemap.dat : 将这一行代码注释取消 xsd__duration = #import “custom/duration.h” | xsd__duration
    参考「How do I use gSOAP with the ONVIF specifications」(https://www.genivia.com/resources.html)说明,看是否需要修改typemap.dat
  2. 然后拷贝到gsoap-2.8/install/bin
  3. 执行命令 (在前面的安装目录下install/bin)
wsdl2h -o onvif.h -t ./typemap.dat /usr/local/gsoap_soft/onvif_wsdl/accesscontrol.wsdl /usr/local/gsoap_soft/onvif_wsdl/accessrules.wsdl /usr/local/gsoap_soft/onvif_wsdl/actionengine.wsdl /usr/local/gsoap_soft/onvif_wsdl/advancedsecurity.wsdl /usr/local/gsoap_soft/onvif_wsdl/analytics.wsdl /usr/local/gsoap_soft/onvif_wsdl/authenticationbehavior.wsdl /usr/local/gsoap_soft/onvif_wsdl/credential.wsdl /usr/local/gsoap_soft/onvif_wsdl/deviceio.wsdl /usr/local/gsoap_soft/onvif_wsdl/devicemgmt.wsdl /usr/local/gsoap_soft/onvif_wsdl/display.wsdl /usr/local/gsoap_soft/onvif_wsdl/doorcontrol.wsdl /usr/local/gsoap_soft/onvif_wsdl/event.wsdl /usr/local/gsoap_soft/onvif_wsdl/imaging.wsdl /usr/local/gsoap_soft/onvif_wsdl/media.wsdl /usr/local/gsoap_soft/onvif_wsdl/media_H265.wsdl /usr/local/gsoap_soft/onvif_wsdl/provisioning.wsdl /usr/local/gsoap_soft/onvif_wsdl/ptz.wsdl /usr/local/gsoap_soft/onvif_wsdl/receiver.wsdl /usr/local/gsoap_soft/onvif_wsdl/recording.wsdl /usr/local/gsoap_soft/onvif_wsdl/replay.wsdl /usr/local/gsoap_soft/onvif_wsdl/schedule.wsdl /usr/local/gsoap_soft/onvif_wsdl/search.wsdl /usr/local/gsoap_soft/onvif_wsdl/thermal.wsdl /usr/local/gsoap_soft/onvif_wsdl/uplink.wsdl
**注意:**
1) *.wsdl对应的地址为,自己wsdl存放位置的地址,这个地方最好为绝对地址(避免出错);
2)其中media_H265.wsdl为media2.wsdl(据说是h265,未测试,下载的时候其官网有2个media);
3)install 为安装目录,其路径:gsoap-2.8/install
  1. 修改生成的onvif.h
    因为摄像头鉴权的需要,在onvif.h头文件中加入#import “wsse.h”。
  2. 执行命令生成C++代码
soapcpp2 -j onvif.h -I ../../gsoap/custom -I ../../gsoap/import -I ../../gsoap
注意:
1、生成的文件有*.xml ,*.h,*.cpp,*.nsmap;“*.xml”可以删除,也可以在执行命令时,添加指令 -X 不生成xml;详细请参照 “soapcpp2  -h”命令的提示信息。
2、*.nsmap的文件大小一致,修改其中一个为“wsdd.nsmap”;保留这个其他可以删除;
3、

3.整理框架代码

  1. 在gsoap-2.8/install/bin文件夹中可以看到一堆文件,onvif.h
    (文件已经没用了)和.cpp文件以及xxx.nsmap文件(ls
    -lptr,可以看见所有的nsmap的大小一致,保留一个重新命名为wsdd.nsmap,其他的可以删)。

  2. 拷贝文件
    在gsoap目录下的终端执行:

cp dom.cpp stdsoap2.c stdsoap2.h 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_linux_C/
  1. 将*.c 修改为 *.cpp。
  2. 使用时加上预处理宏 WITH_OPENSSL

基于Qt和cmake的cmakelist.txt

如下:

cmake_minimum_required(VERSION 2.8)

project(onvifNVT)

#解决so过大
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")

include_directories(
    ./header
    ./onvif
    )

set(HEADERS
    ./header/searchIPC1.h
    ./header/searchIPC2.h
    ./header/searchIPC3.h
    ./onvif/soapH.h
    ./onvif/stdsoap2.h
    ./onvif/duration.h
    ./onvif/soapStub.h
#    ./onvif/struct_timeval.h
    ./onvif/mecevp.h
    ./onvif/smdevp.h
    ./onvif/threads.h
    ./onvif/wsaapi.h
#    ./onvif/wsseapi.h
    ./onvif/wsdd.nsmap
    )

set(SOURCES
    ./onvif/soapC.cpp
    ./onvif/stdsoap2.cpp
    ./onvif/dom.cpp
    ./onvif/duration.cpp
#    ./onvif/struct_timeval.cpp
    ./onvif/mecevp.cpp
    ./onvif/smdevp.cpp
    ./onvif/threads.cpp
    ./onvif/wsaapi.cpp
#    ./onvif/wsseapi.cpp
    )

find_library(ONVIFLIB ONVIF /usr/local/gsoap_soft/gsoap_2_8_106/install/lib)
find_library(SSL libssl.a /usr/local/openssl/lib)
find_library(CYP libcrypto.a /usr/local/openssl/lib)

add_definitions(-DWITH_PURE_VIRTUAL)
add_definitions(-DWITH_NONAMESPACES)
add_definitions(-DWITH_OPENSSL)
add_definitions(-DWITH_DOM)

add_executable(testONVIF "main.cpp" ${HEADERS} ${SOURCES})
target_link_libraries (testONVIF ${TESTFUNC_LIB} ${SSL} ${CYP} dl pthread)

编译ok,缺少摄像头未测试,后续测试后,上传demo。

感谢

菜鸟一枚,踩了无数坑,非常感谢,各位大佬的帮助;
基于cmake的CMakelist.txt如下:

最后感谢这位博主的分享:https://blog.csdn.net/gj139612/article/details/108625429

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在CentOS 7上安装Metasploit框架,您需要执行以下步骤: 1. 首先,您需要安装必要的依赖项。在终端中执行以下命令: ``` sudo yum -y update sudo yum -y install curl gpg gcc-c++ glibc-devel patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison sqlite-devel ``` 2. 安装RVM(Ruby Version Manager)。在终端中执行以下命令: ``` gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB curl -sSL https://get.rvm.io | bash -s stable source /etc/profile.d/rvm.sh rvm requirements rvm install 2.6.5 rvm use 2.6.5 --default ``` 3. 安装PostgreSQL。在终端中执行以下命令: ``` sudo yum -y install postgresql-server postgresql-contrib sudo postgresql-setup initdb sudo systemctl start postgresql sudo systemctl enable postgresql ``` 4. 创建Metasploit数据库用户和数据库。在终端中执行以下命令: ``` sudo su - postgres createuser msf -P createdb msf_database -O msf exit ``` 5. 安装Metasploit框架。在终端中执行以下命令: ``` curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall chmod +x msfinstall sudo ./msfinstall ``` 6. 启动Metasploit框架。在终端中执行以下命令: ``` sudo msfconsole ``` 7. 配置Metasploit框架。在Metasploit控制台中执行以下命令: ``` db_connect msf@msf_database db_status ``` 如果输出结果为“connected to msf_database”,则说明配置成功。 现在,您已经成功在CentOS 7上安装了Metasploit框架

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值