CentOS6.5下编绎gSoap相关问题及解决

2023-11-11 12:48

本文主要是介绍CentOS6.5下编绎gSoap相关问题及解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一,开发环境准备:
1,centos为虚拟下安装,版本为32位,(64位同样可以,均测过,需注意的是红色部分内容)
2,gSoap: gsoap_2.7tar.gz http://www.cs.fsu.edu/~engelen/soap.html

下载下来解压缩,按正常安装过程进行编译、安装。
# tar zxvf gsozp_2.7.12.tar.gz 
# cd gsoap_2.7.12 
#./configure或 {./configure –-prefix=/usr/local/gSOAP(指定安装路径) }
# make 
# make install

问题: ../../ylwrap: line 111: yacc: command not found

原因:
没有安装:yacc(Yet Another Compiler Compiler),是Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器)。

解决方案:
sudo apt-get install flex bison(ubantu)
yum install byacc(centos)

问题:gsoap-2.7/missing: line 46: flex: command not found
解决方法: yum install flex (要重新运行./configure)(centos下)
apt-get install flex(ubantu)

问题:/usr/bin/ld: cannot find -ly
解决方法:yum install bison-devel(centos)
apt-get install bison(ubantu)

问题:../../gsoap/stdsoap2.h:690:19: error: zlib.h: No such file or directory
解决方法:缺少zlib,ubantu下, apt-get install zlib-devel
centos下, yum install zlib-devel;

问题:error: openssl/bio.h: No such file or directory
解决方法:yum install openssl-devel(centos)
ubantu下:
sudo apt-get install openssl
为了安装OpenSSL通常的库文件,首先使用以下命令来确定在Ubuntu系统中可获得的库文件的应用版本:
sudo apt-cache search libssl | grep SSL 
sudo apt-get install libssl-dev

至此基本可以了,

下面执行, 
make;
make install;

+--------------------------------------------------------+
| You now have successfully built and installed gsoap.   |
|                                                        |
| You can link your programs with -lgsoap++ for          |
| C++ projects created with soapcpp2 and you can link    |
| with -lgsoap for C projects generated with soapcpp2 -c |
|                                                        |
| There are also corresponding libraries for SSL and     |
| zlib compression support (-lgsoapssl and lgsoapssl++)  |
| which require linking -lssl -lcrypto -lz               |
|                                                        |
| Thanks for using gsoap.                                |
|                                                        |
|               http://sourceforge.net/projects/gsoap2   |
+--------------------------------------------------------+
出现此即安装成功;

二,   开发linuxW e b Service C/C++客户端

这里,我们直接采用gSoap工具包自带的wsdl2hsoapcpp2工具。

1. 基本流程

Web服务提供者处获取Web ServiceWSDL文件,通常是一个URL

如:http://www.cs.fsu.edu/~engelen/calc.wsdl

当然也可以是一个WSDL形式的XML文件。

2. 使用gSoap工具wsdl2h,根据WSDL生成一个C/C++语法结构的头文件。

如:wsdl2h -s -o calc.h http://www.cs.fsu.edu/~engelen/calc.wsdl

这一步将会得到一个头文件,如:calc.h

该步的目的:实现WSDL文件到.h文件的数据映射。

3. 使用gSoap的预编译器soapcpp2,根据上一步得到的头文件来生成存根文件(soapStub.h)和客户端代码框架。

如:soapcpp2 -i -x -C -L calc.h

这一步将会得到几个. nsmap.h.cpp文件,如:calc.nsmapsoapC.cppsoapH.hsoapStub.hsoapcalcProxy.cppsoapcalcProxy.h

该步的目的:生成相应的底层通信代码。

4. 实现客户端例程

在这一步可以简单地编写一个main函数,如:(注意包含的头文件)

#include "calc.nsmap"

#include "soapcalcProxy.h"  //该头文件已经包含了soapH.h

int main(void)

{

printf("very good!/n");

calcProxy service;

{

double result;

if(service.pow(2, 10, result) == SOAP_OK)

{

std::cout << "The value of 2^10 is " << result << std::endl;

}

}

return 0;

}

5. 用gcc编译客户端,生成可执行代码

    编译需要的文件有:第3步生成的所有文件、第4步编写的main函数所在的文件,以及gsoap目录下的stdsoap2.hstdsoap2.cpp文件共9个文件。

如:calc.nsmapsoapC.cppsoapH.hsoapStub.hsoapcalcProxy.cppsoapcalcProxy.hstdsoap2.cppstdsoap2.hmain.cpp

三、注意事项

1 wsdl2h的用法(WSDL/schema 解析和代码生成器)

wsdl2h [opt] 头文件名 WSDL文件名或URL 

wsdl2h常用选项

-o 文件名,指定输出头文件 

-n 名空间前缀 代替默认的ns 

-c 产生纯C代码,否则是C++代码 

-s 不要使用STL代码 

-t 文件名,指定type map文件,默认为typemap.dat 

-e 禁止为enum成员加上名空间前缀 

type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则,比如在wsmap.dat里写

在本例中,使用的是:wsdl2h -s -o calc.h http://www.cs.fsu.edu/~engelen/calc.wsdl

参数s就表示生成不带STLC/C++语法结构的头文件calc.h

如果不用s就会生成带STL的头文件,这样,在后边的编译中需要加入STL的头

stlvector.h,位于:gsoap/import/目录下。

soapcpp2的用法(编译和代码生成器)

soapcpp2 [opt] 头文件名

soapcpp2常用选项

-C 仅生成客户端代码 

-S 仅生成服务器端代码 

-L 不要产生soapClientLib.csoapServerLib.c文件 

-c 产生纯C代码,否则是C++代码(与头文件有关

-I 指定import路径(见上文) 

-x 不要产生XML示例文件 

-i 生成C++封装(代理),客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)

本例中,使用的是:soapcpp2 -i -x -C -L calc.h

gSoap工具wsdl2soapcpp所生成文件的简单分析

(1) wsdl2生成的具有C/C++语法结构的头文件,其作用就是:将XML语法结构的WSDL文件映射为C/C++语法结构的.h文件;并为下一步做准备。

(2) soapcpp(采用参数:-i -x -C -L)生成的文件共有6个文件:PlayerBeanPortBinding.nsmapsoapC.cppsoapH.hsoapPlayerBeanPortBindingProxy.cppsoapPlayerBeanPortBindingProxy.hsoapStub.h

a. PlayerBeanPortBinding.nsmap文件

该文件的作用:An XML-to-C/C++ namespace mapping table,即WSDL文件与生成的客户端代码框架的一个名字空间的映射表。

b. soapStub.h

该文件就是直接由wsdl2生成的头文件转化而来,它详细定义了WSDL所描述的各项服务和数据结构。

它是soap的存根文件,定义了由wsdl2生成的头文件里对应的远程调用模型(RPC)。

c. soapPlayerBeanPortBindingProxy.soapPlayerBeanPortBindingProxy.cpp

这两个文件是客户端代码的一个简单封装,它封装了底层通信,并向外提供一个很简单的界面,该界面展示了用户能够使用的所有服务(由WSDL所描述)。

d. soapH.hsoapC.cpp

这个两个文件是soap的序列和反序列化代码,

:设置字符编码

   在利用gSoap编写Web Service客户端和服务器端的程序时,需要设置其编码

           方式。接口为:soap_set_mode,其实它是就是一个宏:

#define soap_set_mode(soap, n) ((soap)->imode |= (n), (soap)->omode |= (n))

如果要设置为UTF8

可以这样调用:soap_set_mode(&soap, SOAP_C_UTFSTRING);

详细信息可参考该宏所在文件:stdsoap2.h



原文链接:http://www.360doc.com/content/14/1020/14/14679766_418395018.shtml

这篇关于CentOS6.5下编绎gSoap相关问题及解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/390158

相关文章

MySQL索引失效问题及解决方案

《MySQL索引失效问题及解决方案》:本文主要介绍MySQL索引失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql索引失效一、概要二、常见的导致MpythonySQL索引失效的原因三、如何诊断MySQL索引失效四、如何解决MySQL索引失

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Redis中的数据一致性问题以及解决方案

《Redis中的数据一致性问题以及解决方案》:本文主要介绍Redis中的数据一致性问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Redis 数据一致性问题的产生1. 单节点环境的一致性问题2. 网络分区和宕机3. 并发写入导致的脏数据4. 持

vscode不能打开终端问题的解决办法

《vscode不能打开终端问题的解决办法》:本文主要介绍vscode不能打开终端问题的解决办法,问题的根源是Windows的安全软件限制了PowerShell的运行,而VSCode默认使用Powe... 遇到vscode不能打开终端问题,一直以为是安全软件限制问题,也没搜到解决方案,因为影响也不大,就没有管

Python与Java交互出现乱码的问题解决

《Python与Java交互出现乱码的问题解决》在现代软件开发中,跨语言系统的集成已经成为日常工作的一部分,特别是当Python和Java之间进行交互时,编码问题往往会成为导致数据传输错误、乱码以及难... 目录背景:为什么会出现乱码问题产生的场景解决方案:确保统一的UTF-8编码完整代码示例总结在现代软件

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

解决Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题

《解决Maven项目报错:failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题》这篇文章主要介... 目录Maven项目报错:failed to execute goal org.apache.maven.pl