Simple Object Access Protocol(SOAP)简单对象访问协议,是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。
这里介绍soap嵌入式linux下的使用。
一、gSOAP
选择gSOAP的原因:
gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。
可移植性:gSOAP支持大多 数平台,包括嵌入式系统和小系统(例如嵌入式Symbian,Palm)。可移植性测试Windows(98,XP,Vista),Linux,Unix 系统,Mac OS X,Solaris,HP-UX,AIX,FreeBSD,TRU64,Irix,QNX,VxWorks。
二、gSOAP的移植
1、下载源码
http://sourceforge.net/projects/gsoap2/files/
http://jaist.dl.sourceforge.net/project/gsoap2/gSOAP/gsoap_2.8.24r.zip
本例下载版本为:gsoap_2.8.24r.zip
2、解压源码
$ unzip gsoap_2.8.24r.zip
3、编译x86 平台下工具
配置源码
$ ./configure --prefix=/home/linux/gsoap/gsopa-x86
配置一些特性,比如目标平台安装路径等,如上配置目标平台为x86架构,安装路径为/home/linux/gsoap/gsoap-x86
编译源码
$ make
安装源码到/home/linux/gsoap/gsoap-x86目录
$ make install
4、编译arm平台工具
./configure --prefix=/home/linux/gsoap/gsopa-arm --host=arm-linux
再次配置源码,这次配置目标平台变为arm-linux
修改源码,根据编译错误提示进行适当修改:
修改源码目录下的config.h
注释掉:
#define malloc rpl_malloc
soapcpp和wsdl2h在编译过程中会生成同事这两个工具也在编译时会被用来生成一些特定的文件,所以如果soapcpp和wsdl2h如果被编译成arm架构则无法在PC上执行,也就意味着接下的编译无法完成,所以这里选择不编译这两个文件,而选择使用上节编译所生产的x86架构的对应文件。
修改gsoap/src/Makefile
注释掉
soapcpp2$(EXEEXT): $(soapcpp2_OBJECTS) $(soapcpp2_DEPENDENCIES) $(EXTRA_soapcpp2_DEPENDENCIES)
@rm -f soapcpp2$(EXEEXT)
$(AM_V_CCLD)$(soapcpp2_LINK) $(soapcpp2_OBJECTS) $(soapcpp2_LDADD) $(LIBS)
修改gsoap/wsdl/Makefile
wsdl2h$(EXEEXT): $(wsdl2h_OBJECTS) $(wsdl2h_DEPENDENCIES) $(EXTRA_wsdl2h_DEPENDENCIES)
@rm -f wsdl2h$(EXEEXT)
$(AM_V_CXXLD)$(wsdl2h_LINK) $(wsdl2h_OBJECTS) $(wsdl2h_LDADD) $(LIBS)
拷贝x86架构下的soapcpp和wsdl2h到工程源码目录下:
$ cp /home/linux/gsoap/gsoap-x86/bin/soapcpp2 /home/linux/gsoap/gsoap-2.8/gsoap/src/
$ cp /home/linux/gsoap/gsoap-x86/bin/wsdl2h /home/linux/gsoap/gsoap-2.8/gsoap/wsdl/
编译
$ make
安装
make install