一、 开发环境
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
^
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.dat、wsdl2h放入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.h、soapcpp2放入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 -s-2onvif.h -x -I ../gsoap -I ../gsoap/import/ -I ../gsoap/plugin -I ../gsoap/custom
保存退出并执行以下命令:
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