Ubuntu 下编译onvif

来源:互联网 发布:总结 优化机构设置 编辑:程序博客网 时间:2024/06/06 02:35

一、 开发环境

linux操作系统版本:Ubuntu 14.04 LTS 

linux编译环境:TI交叉编译器arm-arago-linux-gnueabi-g++

gsoap软件包:gsoap_2.8.26.zip

二、编译编译gsoap

2.1.配置编译环境

xxx@Ubuntu:~/gsoap-2.8$./configure --prefix=$(pwd)/_install

2.2.编译

xxx@Ubuntu:~/gsoap-2.8$make

make遇到问题:

问题1:xxx/ylwrap: line 111: yacc: command not found

解决办法:sudo apt-get install byacc

问题2:xxx/gsoap-2.8/missing: line 81: flex: command not found

解决办法:sudoapt-get install flex (需要重新运行./configure)

问题3:/usr/bin/ld: cannot find -ly
            collect2: error: ld returned 1 exit status

解决办法:sudo apt-get install bison

问题4../../gsoap/stdsoap2.h:823:26: fatal error: openssl/bio.h: No such file or directory
            # include <openssl/bio.h>
                          ^
            compilation terminated.
            In file included from ../plugin/md5evp.h:66:0,from ../plugin/md5evp.c:50:
            ../../gsoap/stdsoap2.h:823:26: fatal error: openssl/bio.h: No such file or directory
解决办法suod apt-get install openssl

              $sudo apt-get install libssl-dev

2.3.安装

xxx@Ubuntu:~/gsoap-2.8$make install

安装完成后,在_install\目录生成以下目录:

\bin 

\include 

\lib 

\share

三、onvif框架生成

3.1头文件onvif.h生成

在gsoap目录下创建新的文件夹onvif/onvifh_build/

typemap.datwsdl2h放入onvifh_build目录下

备注说明:

(1)typemap.dat位于gsoap-2.8/gsoap/
(2)wsdl2h位于gsoap-2.8/_install/bin/

wsdl2h相关命令参数
-c   产生c语言的代码,否则产生C++
-s   不使用STL代码
-t   指定typemap.dat文件
-o   指定生成的头文件名

(1)在线生成onvif.h文件

在onvif/onvifh_build/目录下创建头文件生成脚本文件onvif_h_build.sh,添加以下内容:

#!/bin/sh

./wsdl2h -s -t  typemap.dat  -o  onvif.h 

http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl 

http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl 

http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl 

http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl 

http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl 

http://www.onvif.org/onvif/ver10/deviceio.wsdl 

http://www.onvif.org/onvif/ver10/display.wsdl 

http://www.onvif.org/onvif/ver10/event/wsdl/event.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/replay.wsdl 

http://www.onvif.org/onvif/ver10/search.wsdl 

http://www.onvif.org/onvif/ver10/receiver.wsdl 

http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl

每个网址之间用空格分开,保存退出并执行以下命令:

xxx@Ubuntu:~/gsoap-2.8/onvif$./onvif_h_build.sh

执行完命令,即可生成头文件onvif.h。

(2)离线生成onvif.h文件

创建头文件生成脚本文件onvif_h_build.sh,添加以下内容:

#!/bin/sh

wsdl2h -s -t typemap.dat -o onvif.h devicemgmt.wsdl event.wsdl display.wsdl deviceio.wsdl imaging.wsdl media.wsdl ptz.wsdl receiver.wsdl recording.wsdl search.wsdl remotediscovery.wsdl replay.wsdl analytics.wsdl analyticsdevice.wsdl onvif.xsd actionengine.wsdl

注意不同的wsdl以空格分开。

将用到的WSDL文件以及所有相关联的文件从Onvif官网下载下来。下载之后,还需要更改文件中的路径,将wsdl文件中的schemaLocation以及location所指的路径进行修改,修改为本地的地址。将所有需要下载的文件下载到onvif\目录,并修改相关地址。

执行完命令,即可生成头文件onvif.h。

3.2源文件生成

生成onvif.h头文件之后,即可根据soapcpp2命令生成C源文件或者CPP源文件。

在gsoap\onvif\目录下创建新的文件夹onvifcpp_build

onvif.hsoapcpp2放入onvifcpp_build目录下

备注说明:

(1)onvif.h位于gsoap-2.8\onvif\onvifh_build\
(2)soapcpp2位于gsoap-2.8\_install\bin\

soapcpp2相关命令参数
-2   采用SOAP1.2
-x   不产生xml文件(不推荐使用此命令,因为xml文档很有用)
-I   为引入路径(注意:I为i的大写)
-C   只产生客户端代码(注意:C是大写)

在onvif/onvifcpp_build/目录下创建头文件生成脚本文件onvif_cpp_build.sh,添加以下内容:

#!/bin/sh

./soapcpp2 -c -x -L -I ../../import -I ../../../gsoap/ onvif.h  

保存退出并执行以下命令:

xxx@Ubuntu:~/gsoap-2.8/onvif$./onvif_cpp_build.sh

执行完命令,生成头文件源文件。

生成源文件错误修改:

1)需要在onvif.h中加入#import"wsse.h,用来做安全验证
2)需要将import目录下的wsa5.h以下部分注释掉,否则编译时会报soap_xxxx_SOAP_ENV__Fault()函数重复定义。
/*
int SOAP_ENV__Fault
( _QName faultcode,// SOAP 1.1
char         *faultstring,       //SOAP 1.1
char         *faultactor,        //SOAP 1.1
struct SOAP_ENV__Detail  *detail,// SOAP 1.1
struct SOAP_ENV__Code    *SOAP_ENV__Code,// SOAP1.2
struct SOAP_ENV__Reason  *SOAP_ENV__Reason, // SOAP 1.2
char         *SOAP_ENV__Node,// SOAP 1.2
char         *SOAP_ENV__Role,// SOAP 1.2
struct SOAP_ENV__Detail  *SOAP_ENV__Detail,// SOAP 1.2
void);
*/

生成成功会显示
Compilation successful