我正在使用gSOAP在Linux上使用2个独立的wsdl文件在同一应用程序中编写C++ web服务客户端。我设法得到的东西只有一个wsdl文件的工作,并阅读文档后,通过使用两个文件wsdl2h的过程中去:在两个不同的wsdl文件中使用gSOAP时出现链接器错误
wsdl2h -o header.h wsdlfile1.wsdl wsdlfile2.wsdl
这工作得很好,所以我然后做
soapcpp2 -i -I/usr/share/gsoap/import/ header.h
然后我按照指示在typemap.dat中完成了所有通常的名称空间修改。我现在发现我有两个类型为soapService1Proxy.cpp/h和soapService2Proxy.cpp/h的.cpp和.h文件。这不是我所期望的,但无论如何,我将两个头文件都包含在我的主函数中,并创建了每个Proxy类的实例,并且与我仅使用一个wsdl文件的方式完全相同。我然后用
g++ -DWITH_OPENSSL main.cpp soapC.cpp soapService1Proxy.cpp soapService2Proxy.cpp -lgsoapssl++ -lssl
返回错误
/tmp/ccHNDAM4.o:(.data+0x0): multiple definition of `namespaces'
/tmp/ccLJIHwV.o:(.data+0x0): first defined here
collect2: ld returned 1 exit status
编译我知道“namepaces”指的是阵列中的.nsmap文件(在这种情况下对于每个WSDL相同的)。如果我同时包含这两个,我只包含其中的一个,因为编译器会抱怨多重定义。如果有人能够告诉我我在做什么错,我真的很感激,因为我试图尽可能忠实地遵循准则和gSOAP文档,但根本无法解决此问题。