繁体   English   中英

将gSOAP与2个不同的wsdl文件一起使用时出现链接器错误

[英]Linker error when using gSOAP with 2 different wsdl files

我正在使用同一应用程序中的2个单独的wsdl文件在linux上使用gSOAP编写C ++ Web服务客户端。 我设法只使用一个wsdl文件,并在阅读文档后,完成了对两个文件使用wsdl2h的过程:

    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文件。 这不是我所期望的,但无论如何,我在我的main函数中包含了两个头文件并创建了每个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文档,但根本无法解决这个问题。

我从未使用过SOAP,但我快速浏览了一下这个用户指南

第7.1.4节中的最后一段说明soapcpp2-n-p选项有助于解决链接冲突。 第19.35节的链接提供了更多信息。 您似乎必须使用-q选项分别在每个文件上运行wsdl2h ,以便为每个文件提供C ++命名空间。 当你运行soapcpp2 ,它将自动应用-p ,你所要做的就是提供-n ,让namespaces数组以你的C ++命名空间名称作为前缀,后跟一个下划线。

我没有尝试任何这个,但希望这足以让你再次前进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM