Onvif 學習筆記(3)Onvif框架搭建

Onvif開發環境搭建

框架代碼在Linux環境下生成,經過比對,以下連個版本操作系統在使用相同版本的情況下生成的框架代碼相同

 

生成框架環境準備

下面記錄的是在CentOS下編譯gSoap生成框架代碼的過程

 

要使用root用戶進行編譯安裝,否則可能會因權限問題導致安裝失敗。

在桌面打開終端並切換到root用戶

$ su

輸入密碼,出現類似“[root@localhost Desktop]#”字樣即爲成功。

 

以下都是採用源碼編譯安裝的方式安裝。

 

1.安裝bison

官網:http://www.gnu.org/software/bison

使用版本: bison-2.7.tar.gz

下載地址: http://101.96.10.58/ftp.gnu.org/gnu/bison/bison-2.7.tar.gz

命令:

# ./configure

# make

# make install

 

2.安裝flex

官網:http://flex.sourceforge.net

版本:flex-2.6.4.tar.gz

下載地址: https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz

命令:

# ./configure

# make

# make install

 

3.安裝openssl

官網:https://www.openssl.org

版本:openssl-1.0.2m.tar.gz

下載地址: https://www.openssl.org/source/old/1.0.2/openssl-1.0.2m.tar.gz

備註:採用默認安裝路徑/usr/local/ssl/,這個路徑等下編譯gSoap源碼時會用到。

命令:

# ./config

# make

# make install

 

4.gSoap編譯

命令:

# ./configure --with-openssl=/usr/local/ssl

# make

# make install

 

make和make install 會出現以下錯誤

 

解決的方法是在 ./configure 後面加上參數LDFLAS=‘-ldl’

命令:

# make clean

# ./configure --with-openssl=/usr/local/ssl LDFLAGS=-ldl

# make

# make install

 

修改gsoap\typemap.dat文件,在文件末尾添加

 

wsnt__FilterType = $ wsnt__TopicExpressionType;

_wsnt__NotificationMessageHolderType_Message = $_tt__Message* tt__Message;

 

生成onvif.h文件

命令:

 

wsdl2h -c++ -x -t gsoap/typemap.dat -o onvif.h -d https://www.onvif.org/ver10/network/wsdl/remotediscovery.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.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 https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl

 

修改onvif.h文件,否則無法鑑權

在生成的onvif.h中添加 #import "wsse.h"(切記不要寫成 #include "wsse.h")

chmod 777 onvif.h

 

生成onvif框架代碼

先創建文件夾來保存代碼

$ mkdir onvif

然後生成代碼

$ soapcpp2 -2 -C -c++ -x -j -I gsoap/import -I gsoap -I gsoap/custom -d onvif onvif.h

 

根據不同的gSOAP版本,這個過程你可能會遇到這樣的錯誤:

wsa5.h(288): **ERROR**: service operation name clash: struct/class 'SOAP_ENV__Fault' already declared at wsa.h:273

之所有會出現這個錯誤,是因爲onvif.h頭文件中同時:

#import "wsdd10.h" // wsdd10.h中又#import "wsa.h"#import "wsa5.h"   // wsa.h和wsa5.h兩個文件重複定義了int SOAP_ENV__Fault

解決方法:修改import\wsa5.h文件,將int SOAP_ENV__Fault修改爲int SOAP_ENV__Fault_Alex

 

出現Compilation successful字樣,編譯成功完成.

Windows 下開發環境準備

1.VS2013編譯openssl-1.0.2m

1)安裝Perl

官網:http://www.perl.org/

使用版本:strawberry-perl-5.28.0.1

下載地址:http://strawberryperl.com/download/5.28.0.1/strawberry-perl-5.28.0.1-64bit.msi

2)下載安裝nasm,並配置到環境變量中

官網:www.nasm.us

使用版本:2.14rc15

下載地址:https://www.nasm.us/pub/nasm/releasebuilds/2.14rc15/win64/nasm-2.14rc15-win64.zip

 

3)使用“VS2013 x86 本機工具命令提示”進入控制檯

perl Configure VC-WIN32

ms\do_nasm

nmake -f ms\ntdll.mak

結果在out32dll目錄和inc32目錄中

2.拷貝inc32目錄下的openssl

3.拷貝gSoap源碼

gSoap拷貝的源文件有的只有.c文件,沒有.cpp文件,需要把.c改成.cpp,將上一步拷貝的openssl文件夾放到gSoap源碼所在的目錄。

文件列表

 

dom.cpp

dom.h

duration.cpp

duration.h

mecevp.cpp

mecevp.h

onvif.h

openssl

smdevp.cpp

smdevp.h

soapC.cpp

soapDeviceBindingProxy.cpp

soapDeviceBindingProxy.h

soapH.h

soapImagingBindingProxy.cpp

soapImagingBindingProxy.h

soapMediaBindingProxy.cpp

soapMediaBindingProxy.h

soapPTZBindingProxy.cpp

soapPTZBindingProxy.h

soapPullPointSubscriptionBindingProxy.cpp

soapPullPointSubscriptionBindingProxy.h

soapRecordingBindingProxy.cpp

soapRecordingBindingProxy.h

soapRemoteDiscoveryBindingProxy.cpp

soapRemoteDiscoveryBindingProxy.h

soapReplayBindingProxy.cpp

soapReplayBindingProxy.h

soapSearchBindingProxy.cpp

soapSearchBindingProxy.h

soapStub.h

soapwsddProxy.cpp

soapwsddProxy.h

stdsoap2.cpp

stdsoap2.h

threads.cpp

threads.h

wsa5.h

wsaapi.cpp

wsaapi.h

wsdd.nsmap

wsseapi.cpp

wsseapi.h

 

4.配置環境變量

變量名GSOAP_VS2013

變量值E:\JnPlatformONVIF\opensrc\gsoap

5.修改工程屬性

1.不使用預編譯頭

2.添加 /bigobj編譯命令

 

編譯出現錯誤

error LNK2001: 無法解析的外部符號 _namespaces

在cpp文件中包含wsdd.nsmap 文件(#include "wsdd.nsmap")

 

 

使用框架的時候,包含如下gSOAP頭文件

// gSoap 頭文件
#include "wsaapi.h"
#include "wsseapi.h"
#include "soapStub.h"
#include "soapwsddProxy.h"
#include "soapDeviceBindingProxy.h"
#include "soapMediaBindingProxy.h"
#include "soapImagingBindingProxy.h"

包含目錄中加入gsoap文件夾

預處理器中需要定義 WITH_OPENSSL

附加庫要有openssl生成的兩個lib文件,libeay32.lib與ssleay32.lib

並將附加庫目錄設爲..\gsoap\openssl\lib,即lib的所在目錄下。

這樣就可以開發了。

附件爲VS2013環境下搭建的空白框架

https://download.csdn.net/download/lasuerte/10690692

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章