Компиляция gSoap с помощью С++
Я пытаюсь получить простой пример, используя gSoap для VS2008.
Я сделал следующее:
wsdl2h -o Init.h http://myservices/InitalisationService.asmx?WSDL
И затем это:
soapcpp2 -I "C:\3pSDK\gsoap-2.7\gsoap\import" -i -C -limport Init.h
который создает много файлов. Моя папка проекта выглядит следующим образом:
// 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 engine -lgsoap ++ (или использовать источник stdsoap2.cpp в случае libgsoap ++. a не установлен) с вашим кодом.
Есть ли библиотека gsoap ++ для win32?
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 *)" ([email protected]@[email protected]@[email protected]) 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 *)" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z)
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_putindependent(struct soap *)" ([email protected]@[email protected]@@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 *)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected])
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_getindependent(struct soap *)" ([email protected]@[email protected]@@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 *)" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z)
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_fdelete(struct soap_clist *)" ([email protected]@[email protected]@@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 *)" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected])
1>ortC.obj : error LNK2019: unresolved external symbol "void __cdecl soap_default_int(struct soap *,int *)" ([email protected]@[email protected]@[email protected]) referenced in function "public: virtual void __thiscall _ns1__initalizePlayerResponse::soap_default(struct soap *)" ([email protected][email protected]@[email protected]@@Z)
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_out_int(struct soap *,char const *,int,int const *,char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "int __cdecl soap_out__ns1__initalizePlayerResponse(struct soap *,char const *,int,class _ns1__initalizePlayerResponse const *,char const *)" ([email protected]@[email protected]@[email protected]@[email protected])
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_ignore_element(struct soap *)" ([email protected]@[email protected]@@Z) referenced in function "class _ns1__initalizePlayerResponse * __cdecl soap_in__ns1__initalizePlayerResponse(struct soap *,char const *,class _ns1__initalizePlayerResponse *,char const *)" ([email protected]@[email protected]@[email protected]@[email protected]@Z)
1>ortC.obj : error LNK2019: unresolved external symbol "int * __cdecl soap_in_int(struct soap *,char const *,int *,char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "class _ns1__initalizePlayerResponse * __cdecl soap_in__ns1__initalizePlayerResponse(struct soap *,char const *,class _ns1__initalizePlayerResponse *,char const *)" ([email protected]@[email protected]@[email protected]@[email protected]@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 ==========
Ответы
Ответ 1
Хорошо, для тех, кто расстроен документами на сайте gSoap, используя VS2008 для компиляции примера с быстрым клиентом, здесь шаги (серверы разные).
Сгенерировать файл заголовка из WSDL: wsdl2h -o Init.h http://bleh.com/myservice.asmx?WSDL
Сгенерируйте файлы клиента soap:
soapcpp2 -C -IC:\3pSDK\gsoap-2.7\gsoap\import Init.h
Убедитесь, что вы добавили следующие файлы в ваше решение для сборки:
soapC.cpp, soapClient.cpp, and stdsoap2.cpp
Убедитесь, что для каждого из этих файлов вы выбираете параметр компилятора "Не использовать предварительно скомпилированные заголовки". (Свойства файла → С++ → Предварительно скомпилированные заголовки → Создать/Использовать предварительно скомпилированный заголовок).
Наконец, добавьте файл .nsmap, сгенерированный для вашего прокси, в stdafx.h(или в основном, если ваш проект не использует предварительно скомпилированные заголовки).
Вот пример, который делает простой запрос:
// 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;
}
надеюсь, что это поможет кому-то!