`
hunxiejun
  • 浏览: 1144286 次
文章分类
社区版块
存档分类
最新评论

利用C++命名空间解决多个wsdl编译冲突的问题

 
阅读更多

说明:本文参考gsoap文档

1. 生成envC.o

创建一个空的头文件:env.h。然后执行:

soapcpp2-penvenv.h

g++-cenvC.cpp

2. 生成stdcpp2.o

执行g++-c-DWITH_NONAMESPACESstdsoap2.cpp,用来生成stdcpp2.o。

下面的例子同时处理两个不同的wsdl文件,一个wsdl生成客户端代码,一个wsdl生成服务端代码,最后它们分别生成的代码可以编译在一块。这样可以实现一个wsdl生成的服务端代码可以调用另一个wsdl生成的客户端代码,从而实现webservice的嵌套调用。

3. 处理生成客户端代码的wsdl

//-q:指定命名空间为Kpi。

wsdl2h-s-qKpi-oKpiEngine.HKpiEngine.Wsdl

//生成 客户端代码

soapcpp2-i-C-n-pKpiKpiEngine. h

假设生成后的代码为:KpiSoapProxy.cpp、KpiC.Cpp

执行:g++-cKpiSoapProxy.Cpp,生成KpiSoapProxy.o

执行:g++-cKpiC.Cpp,生成KpiC.o

4. 处理生成服务端代码的wsdl

//-q:指定命名空间为Test

wsdl2h-s-qTestHelloWorldSer.Wsdl

soapcpp2-i-t-S-nHelloWorldSer.H

假设生成后的代码为:TestSoapService.cpp、TestC.Cpp

执行:g++-cTestSoapService.Cpp,生成TestSoapService.O

执行:g++-cTestC.Cpp,生成TestC.o

5. 生成可执行程序:

g++-omainmain.cppstdsoap2.oenvC.oKpiSoapProxy.OKpiC.OTestSoapService.OTestC.O

以上的步骤可以组合到一个makefile中。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics