首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用gSoap编译c++

用gSoap编译c++
EN

Stack Overflow用户
提问于 2010-07-27 13:21:54
回答 1查看 18.1K关注 0票数 17

我正在尝试获得一个使用gSoap的简单示例,用于VS2008。

我做了以下工作:

代码语言:javascript
复制
wsdl2h -o Init.h http://myservices/InitalisationService.asmx?WSDL

然后这个:

代码语言:javascript
复制
soapcpp2 -I "C:\3pSDK\gsoap-2.7\gsoap\import" -i -C -limport Init.h

会产生很多文件。我的项目文件夹如下所示:

代码语言:javascript
复制
// generated files
Init.h
InitalisationServiceSoap.initalizePlayer.req.xml
InitalisationServiceSoap.initalizePlayer.res.xml
InitalisationServiceSoap.nsmap
InitalisationServiceSoap12.initalizePlayer.req.xml
InitalisationServiceSoap12.initalizePlayer.res.xml
InitalisationServiceSoap12.nsmap
ortC.cpp
ortH.h
ortInitalisationServiceSoap12Proxy.cpp
ortInitalisationServiceSoap12Proxy.h
ortInitalisationServiceSoapProxy.cpp
ortInitalisationServiceSoapProxy.h
ortMatlab.c
ortMatlab.h
ortStub.h

// Project Files
ReadMe.txt
stdafx.cpp
stdafx.h
WebServicesClient.cpp
WebServicesClient.vcproj
targetver.h

// files added to the project from gSoap folder
stdsoap2.cpp
stdsoap2.h
typemap.dat

当我构建时,我会得到很多链接器错误(未解决的外部问题)。我找不到任何可以链接的东西(例如,没有二进制库)--我缺少了什么?

我认为这可能与文档中的以下内容有关:

使用

完成生成的soapC.cpp、soapcalcProxy.cpp和运行时gSOAP引擎-lgsoap++ (或在未安装libgsoap++.a时使用源代码stdsoap2.cpp )并将其链接到代码中。

有用于gsoap++的win32库吗?

代码语言:javascript
复制
 1>Compiling...
 1>WebServicesClient.cpp
 1>ortC.cpp
 1>Generating Code...
 1>Linking...
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultcode referenced in function _http_response
 1>stdsoap2.obj : error LNK2001: unresolved external symbol _namespaces
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_getheader referenced in function _soap_recv_header
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultsubcode referenced in function _soap_set_fault
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultstring referenced in function _soap_set_fault
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_putfault referenced in function _soap_send_fault
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_putheader referenced in function _soap_send_fault
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_serializefault referenced in function _soap_send_fault
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_serializeheader referenced in function _soap_send_fault
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_getfault referenced in function _soap_recv_fault
 1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultdetail referenced in function _soap_set_error
 1>ortC.obj : error LNK2019: unresolved external symbol "void * __cdecl soap_class_id_enter(struct soap *,char const *,void *,int,unsigned int,char const *,char const *)" (?soap_class_id_enter@@YAPAXPAUsoap@@PBDPAXHI11@Z) referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * __cdecl soap_in_std__string(struct soap *,char const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,char const *)" (?soap_in_std__string@@YAPAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAUsoap@@PBDPAV12@1@Z)
 1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_putindependent(struct soap *)" (?soap_putindependent@@YAHPAUsoap@@@Z) referenced in function "int __cdecl soap_put_std__string(struct soap *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const *,char const *,char const *)" (?soap_put_std__string@@YAHPAUsoap@@PBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PBD2@Z)
 1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_getindependent(struct soap *)" (?soap_getindependent@@YAHPAUsoap@@@Z) referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * __cdecl soap_get_std__string(struct soap *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,char const *,char const *)" (?soap_get_std__string@@YAPAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAUsoap@@PAV12@PBD2@Z)
 1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_fdelete(struct soap_clist *)" (?soap_fdelete@@YAHPAUsoap_clist@@@Z) referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * __cdecl soap_instantiate_std__string(struct soap *,int,char const *,char const *,unsigned int *)" (?soap_instantiate_std__string@@YAPAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAUsoap@@HPBD1PAI@Z)
 1>ortC.obj : error LNK2019: unresolved external symbol "void __cdecl soap_default_int(struct soap *,int *)" (?soap_default_int@@YAXPAUsoap@@PAH@Z) referenced in function "public: virtual void __thiscall _ns1__initalizePlayerResponse::soap_default(struct soap *)" (?soap_default@_ns1__initalizePlayerResponse@@UAEXPAUsoap@@@Z)
 1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_out_int(struct soap *,char const *,int,int const *,char const *)" (?soap_out_int@@YAHPAUsoap@@PBDHPBH1@Z) referenced in function "int __cdecl soap_out__ns1__initalizePlayerResponse(struct soap *,char const *,int,class _ns1__initalizePlayerResponse const *,char const *)" (?soap_out__ns1__initalizePlayerResponse@@YAHPAUsoap@@PBDHPBV_ns1__initalizePlayerResponse@@1@Z)
 1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_ignore_element(struct soap *)" (?soap_ignore_element@@YAHPAUsoap@@@Z) referenced in function "class _ns1__initalizePlayerResponse * __cdecl soap_in__ns1__initalizePlayerResponse(struct soap *,char const *,class _ns1__initalizePlayerResponse *,char const *)" (?soap_in__ns1__initalizePlayerResponse@@YAPAV_ns1__initalizePlayerResponse@@PAUsoap@@PBDPAV1@1@Z)
 1>ortC.obj : error LNK2019: unresolved external symbol "int * __cdecl soap_in_int(struct soap *,char const *,int *,char const *)" (?soap_in_int@@YAPAHPAUsoap@@PBDPAH1@Z) referenced in function "class _ns1__initalizePlayerResponse * __cdecl soap_in__ns1__initalizePlayerResponse(struct soap *,char const *,class _ns1__initalizePlayerResponse *,char const *)" (?soap_in__ns1__initalizePlayerResponse@@YAPAV_ns1__initalizePlayerResponse@@PAUsoap@@PBDPAV1@1@Z)
 1>G:\Prototypes\WebServicesClient\Debug\WebServicesClient.exe : fatal error LNK1120: 19 unresolved externals
 1>Build log was saved at "file://g:\Prototypes\WebServicesClient\WebServicesClient\Debug\BuildLog.htm"
 1>WebServicesClient - 20 error(s), 0 warning(s)
 ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-27 14:59:49

好的,对于那些对gSoap站点上的文档感到失望的人,使用VS2008来编译一个快速客户端示例,下面是步骤(服务器是不同的)。

从WSDL: wsdl2h -o Init.h http://bleh.com/myservice.asmx?WSDL生成头文件

生成soap客户端文件:

代码语言:javascript
复制
soapcpp2 -C -IC:\3pSDK\gsoap-2.7\gsoap\import Init.h

确保将下列文件添加到构建解决方案中:

代码语言:javascript
复制
soapC.cpp, soapClient.cpp, and stdsoap2.cpp

确保,对于每个这些文件,您选择编译器选项“不使用预编译头”。(文件属性-> C++ ->预编译头->创建/使用预编译头)。

最后,将为代理生成的.nsmap文件添加到stdafx.h (如果您的项目没有使用预编译的头)(或者在主目录中)。

下面是一个简单查询的示例:

代码语言:javascript
复制
// WebServicesClient.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "init/soapInitServiceSoapProxy.h"

#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
std::string user = "AAAA";
std::string pass = "BBBB";

InitServiceSoap             service;    

_ns1__initPlayer            query;
_ns1__initPlayerResponse    ans;

query.psParam1 = &user;
query.psParam2 = &pass; 

if( service.__ns2__initPlayer(&query, &ans) == SOAP_OK )
{
    cout << "success!" << endl;     
}

cin.get();

return 0;
}

希望这能帮到别人!

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3344038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档