SOAP嵌入式linux下的應(yīng)用使用方法(一)
Simple Object Access Protocol(SOAP)簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議,是交換數(shù)據(jù)的一種協(xié)議規(guī)范,是一種輕量的、簡(jiǎn)單的、基于XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)子集)的協(xié)議,它被設(shè)計(jì)成在WEB上交換結(jié)構(gòu)化的和固化的信息。
這里介紹soap嵌入式linux下的使用。
一、gSOAP
選擇gSOAP的原因:
gSOAP編譯工具提供了一個(gè)SOAP/XML 關(guān)于C/C++ 語(yǔ)言的實(shí)現(xiàn),從而讓C/C++語(yǔ)言開(kāi)發(fā)web服務(wù)或客戶端程序的工作變得輕松了很多。絕大多數(shù)的C++web服務(wù)工具包提供一組API函數(shù)類庫(kù)來(lái)處理特定的SOAP數(shù)據(jù)結(jié)構(gòu),這樣就使得用戶必須改變程序結(jié)構(gòu)來(lái)適應(yīng)相關(guān)的類庫(kù)。與之相反,gSOAP利用編譯器技術(shù)提供了一組透明化的SOAP API,并將與開(kāi)發(fā)無(wú)關(guān)的SOAP實(shí)現(xiàn)細(xì)節(jié)相關(guān)的內(nèi)容對(duì)用戶隱藏起來(lái)。
可移植性:gSOAP支持大多 數(shù)平臺(tái),包括嵌入式系統(tǒng)和小系統(tǒng)(例如嵌入式Symbian,Palm)??梢浦残詼y(cè)試Windows(98,XP,Vista),Linux,Unix 系統(tǒng),Mac OS X,Solaris,HP-UX,AIX,F(xiàn)reeBSD,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 平臺(tái)下工具
配置源碼
$ ./configure --prefix=/home/linux/gsoap/gsopa-x86
配置一些特性,比如目標(biāo)平臺(tái)安裝路徑等,如上配置目標(biāo)平臺(tái)為x86架構(gòu),安裝路徑為/home/linux/gsoap/gsoap-x86
編譯源碼
$ make
安裝源碼到/home/linux/gsoap/gsoap-x86目錄
$ make install
4、編譯arm平臺(tái)工具
./configure --prefix=/home/linux/gsoap/gsopa-arm --host=arm-linux
再次配置源碼,這次配置目標(biāo)平臺(tái)變?yōu)閍rm-linux
修改源碼,根據(jù)編譯錯(cuò)誤提示進(jìn)行適當(dāng)修改:
修改源碼目錄下的config.h
注釋掉:
#define malloc rpl_malloc
soapcpp和wsdl2h在編譯過(guò)程中會(huì)生成同事這兩個(gè)工具也在編譯時(shí)會(huì)被用來(lái)生成一些特定的文件,所以如果soapcpp和wsdl2h如果被編譯成arm架構(gòu)則無(wú)法在PC上執(zhí)行,也就意味著接下的編譯無(wú)法完成,所以這里選擇不編譯這兩個(gè)文件,而選擇使用上節(jié)編譯所生產(chǎn)的x86架構(gòu)的對(duì)應(yīng)文件。
修改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架構(gòu)下的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