Как собрать несколько клиентских веб-сервисов gsoap в один исполняемый файл? - PullRequest
4 голосов
/ 29 декабря 2011

Я использую gSOAP для веб-служб, но у меня проблема: я должен скомпилировать 2 веб-службы в один исполняемый файл, и некоторые функции имеют одинаковые имена вместо аргумента для использования другого префикса для имен функций.

Ошибка компиляции:

X.o: In function `soap_get_string(soap*, char**, char const*, char const*)':
X.cpp:8669: multiple definition of `soap_get_string(soap*, char**, char const*, char const*)'
Y.o:Y.cpp:4763: first defined here

В Makefile:

wsdl2h -qlpr X.wsdl
wsdl2h Y.wsdl Y.xsd
soapcpp2 -qlpr -plpr -plprws $(GSOAP_IMPORT) -i -C X.h
soapcpp2 -psiwcprws $(GSOAP_IMPORT) -i -C Y.h

У кого-нибудь есть идеи, как решить эту проблему?

1 Ответ

6 голосов
/ 29 декабря 2011

19.34 Как объединить несколько реализаций клиента и сервера в один исполняемый файл Инструмент wsdl2h можно использовать для импорта нескольких WSDL и схемы сразу. Сервисные определения объединены в одном файл заголовка, который будет проанализирован soapcpp2. Важно назначить префиксы пространства имен для URI пространства имен с использованием файла typemap.dat. В противном случае wsdl2h назначит префиксы пространства имен ns1, ns2 и т. Д. к сервисным операциям и типам схем. Таким образом, любое изменение WSDL или схема может привести к новому назначению префикса. Больше подробностей, пожалуйста, смотрите раздел 8.2. Другой подход к объединению нескольких клиентов и обслуживать приложения в один исполняемый файл с помощью C ++ пространства имен для структурного разделения определений или путем создания C библиотеки для объектов клиент / сервер, как объяснено в последующих разделы. Это автоматизировано с помощью опции wsdl2h -q. Оба подхода продемонстрировано на примере в распределении gSOAP, образцы / ссылка (C только) и примеры / link ++ (C ++ с пространствами имен C ++).

...