Toon posts:

gSoap mulit-client "already defined" error

Pagina: 1
Acties:
  • 265 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik gebruik gSoap2.7 om C code te genereren. Maar heb 2 clients nodig en dit geeft volgend probleem. Als ik de code compile krijg ik volgende errors:

KseServiceC.obj : error LNK2005: _soap_serializeheader already defined in baseServiceC.obj
KseServiceC.obj : error LNK2005: _soap_putheader already defined in baseServiceC.obj
KseServiceC.obj : error LNK2005: _soap_getheader already defined in baseServiceC.obj
KseServiceC.obj : error LNK2005: _soap_fault already defined in baseServiceC.obj
KseServiceC.obj : error LNK2005: _soap_serializefault already defined in baseServiceC.obj
KseServiceC.obj : error LNK2005: _soap_putfault already defined in baseServiceC.obj
KseServiceC.obj : error LNK2005: _soap_getfault already defined in baseServiceC.obj
....

Ik start met 2 wsdl files en daar uit genereer ik 2 header files.
wsdl2h -c -n kseService -o kseService.h kseService.wsdl
wsdl2h -c -n baseService -o baseService.h baseService.wsdl

Dan genereer ik de eigenlijke C code

soapcpp2 -c -d c:\testje\ -n -p kseService kseService.h
soapcpp2 -c -d c:\testje\ -n -p baseService baseService.h

Als ik de documentatie goed heb verstaan moet de -n optie mijn probleem normaal toch oplossen:

"-n When used with -p, enables multi-client and multi-server builds:
Sets compiler option WITH_NONAMESPACES, see Section 9.11
Saves the namespace mapping table with name < name > _namespaces instead of namespaces
Renames soap_serve() into < name > _serve() and soap_destroy() into < name > _destroy() "

Kan iemand mij zeggen wat ik mis doe of vergeten ben?

Verwijderd

Topicstarter
Heb de oplossing gevonden, de schrijver van gSoap heeft me de oplossing gemailed.
Hi,

Compile the KseClientLib.cpp and baseClientLib.cpp sources. Also add
envC.cpp to your project build. This code handles SOAP faults and SOAP
headers. To create envC.cpp, execute: soapcpp2 -penvC.cpp env.h where
env.h contains the SOAP Header definitions used by both clients. The
env.h file can be empty if no specific SOAP Headers are used. In that
case, the envC.cpp serializers assume that only SOAP fault processing
is used.

Note that compiling KseClientLib.cpp may generate warnings on static
functions defined but not used. This is normal (I'm working on
improving this).

Hope this helps.