Ошибка компоновщика при использовании gSOAP с двумя разными файлами wsdl

Я пишу клиент веб-службы C++, используя gSOAP в linux, используя 2 отдельных файла wsdl в одном приложении. Мне удалось заставить все работать только с одним файлом wsdl, и после прочтения документации я прошел через процесс использования wsdl2h для обоих файлов:

    wsdl2h -o header.h wsdlfile1.wsdl wsdlfile2.wsdl

Это сработало нормально, и я тогда сделал

    soapcpp2 -i -I/usr/share/gsoap/import/ header.h

Затем я сделал все обычное пространство имен изменения в typemap.dat в соответствии с инструкциями. Теперь я обнаружил, что у меня есть два файла .cpp и .h типа soapService1Proxy.cpp/h и soapService2Proxy.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

. Я знаю, что «пространства имен» относятся к массиву в файлах .nsmap (которые в этом случае идентичны для каждого wsdl). Я включил только один из них, поскольку компилятор жалуется на множественное определение, если я включаю оба. Я был бы очень признателен, если бы кто-нибудь мог сказать мне, что я здесь делаю неправильно, поскольку я пытался максимально точно следовать рекомендациям и документам gSOAP, но просто не могу решить эту проблему.

5
задан mathematician1975 19 April 2012 в 21:57
поделиться