2012-05-16 6 views
2

В Linux-системе я хочу создать клиентское приложение с использованием gSOAP-2.8.8, которое взаимодействует с сервисом SOAP, созданным на WCF. Поэтому я пошел по следующему:Невозможно скомпилировать gSOAP с поддержкой WS-Security (т. Е. Wsse-plugin)

wsdl2h -t typemap.dat -o myService.h myService.wsdl  
soapcpp2 -Igsoap/import -CLix myService.h 

И заменить '#include soapH.h' в wsseapi.h с soapcpp2 сгенерированных soapH.h, как указано в wsseapi.h

Затем, критический шаг чтобы вручную добавить следующие строки в myService.h

#import "wsse.h" 

struct SOAP_ENV__Header" 
{ 
    mustUnderstand // must be understood by receiver 
    _wsse__Security *wsse__Security; ///< TODO: Check element type (imported type) 
}; 

... и компилировать эти файлы как

g++ -DWITH_DOM -DWITH_OPENSSL -Igsoap -Igsoap/import -Igsoap/plugin -o test \ 
    myService.cpp soapC.cpp soapmyServiceProxy.cpp gsoap/stdsoap2.cpp gsoap/dom.cpp \ 
    gsoap/custom/duration.c gsoap/plugin/wsseapi.cpp gsoap/plugin/smdevp.c gsoap/plugin/mecevp.c \ 
    -L/usr/lib -lssl -lcrypt 

Я получаю объектные файлы для всех моих источников ;-), но все равно получаю две ошибки на этапе компоновки.

soapC.cpp:203: undefined reference to `soap_in_ns4__duration(soap*, char const*, long long*, char const*)' 
soapC.cpp:676: undefined reference to `soap_in_ns4__duration(soap*, char const*, long long*, char const*)' 

Edit: В качестве обходного пути я в настоящее время заменить soap_in_ns4__duration() с soap_in_xsd__duration(), которая реализуется в обычае/duration.c

Тем не менее, может кто-нибудь дать мне подсказку, что происходит Неправильно здесь ?! Заранее спасибо

ответ

1

вы должны включить файл "soapH.h" в свой основной файл, который вы пишете.

+0

Я не понял, у меня уже есть soapmyServiceProxy.h, который, в свою очередь, включает soapH.h Итак, как это должно помочь? – user696597

+0

извините, я не осознал этого, но после включения также вы получаете эти ошибки, означает, что некоторые вещи имеют дело с заголовочными файлами и тем, как вы вызываете методы. У меня была аналогичная проблема, когда я начал использовать gsoap 2.8.8, и я могу ее исправить, поэтому, если вы можете предоставить какой-то подробный код, который вы делаете, я могу попробовать его исправить. Я знаю, что трудно решить эти проблемы с gsoap, и я много боролся с этим. Пожалуйста, предоставьте подробный код, который я попробую помочь вам разобраться. – krishna555