Я использую приложение vmware web api , пытаясь просто получить поля в объекте "ServiceContent". Пример того, как это можно сделать, находится на форуме vmware . Содержащийся здесь пример прекрасно компилируется для меня, однако я получаю segfaults при запуске простого примера - в частности, трассировка возвращается к функции soap_serializeheader () (я считаю, что они определены в stdsoap2.cpp). Моя проблема в том, что я не знаю, как избежать этого segfault, и понятия не имею, почему это происходит (поскольку я следую примеру почти дословно) . Я использую цепочку инструментов OS X (версия gcc 4.0.1 (сборка Apple Inc., 5465)) в сочетании с (выпуск gsoap 2.7.16). Я попробовал gsoap 2.8, но получил тот же результат. Ниже приведена процедура, которой я пользовался, чтобы добраться туда, где я сейчас нахожусь.
Это команды, которые я использовал для разбора wsdl:
wsdl2h -o vim25.h vimService.wsdl
После анализа я скомпилировал следующую команду:
soapcpp2 -x -C -pvsp vim25.h -I/place/where/stlvector.h/is
при этом создаются файлы vspC.cpp, vspClient.cpp и vspVimBindingProxy.cpp. Внутренне эти файлы имеют одинаковые префиксы для функций (т. Е. Ns1 / ns2 и т. Д.), Поэтому мои вызовы такие же, как в примере.
Это команда, которую я использую для компиляции vspC.cpp и vspClient.cpp:
g++ -DWITH_COOKIES -DWITH_OPENSSL -c vspC.cpp
g++ -DWITH_COOKIES -DWITH_OPENSSL -c vspClient.cpp
Это команда, которую я использую для компиляции stdsoap2.cpp (если я не компилирую с -DWITH_NONAMESPACES, я получаю ошибку о неопределенном символе "_namepspaces", когда я связываю все):
g++ -DWITH_COOKIES -DWITH_OPENSSL -DWITH_NONAMESPACES -c stdsoap2.cpp
Затем я связываю все вместе с тестовым кодом (опять-таки, это почти идентично скопировано из примера, только с изменениями, чтобы правильно ссылаться на созданные мной файлы):
g++ -DWITH_COOKIES -DWITH_OPENSSL vspC.o vcpClient.o stdsoap2.o testcase.cpp -lssl -lcrypto -o doesntwork
Это компилируется правильно, но, конечно, не запускается. Я прочитал о пользователе OS X в этом сообщении на форуме vmware , у которого также были проблемы. Это появляется руководство по gsoap говорит, что вы не можете использовать stdsoap2.cpp заголовок и коды сериализации ошибок, и вы должны скомпилировать их отдельно. Пользователь в OS X post , кажется, сделал это, однако я не уверен, как включить их в мой тестовый файл (он создает пустой файл env.h, а затем компилирует его с soap2cpp) - если Я включаю файл envH.h, который я получаю о конфликтах имен с vspH.h. Итак, второй вопрос: как мне использовать soap2cpp для правильной компиляции всех заглушек, чтобы не возникало конфликтов в пространстве имен (с этим я, похоже, сталкиваюсь).
Я не буду указывать источник, так как он отображается на первой ссылке на форум vwmare пользователем stumpr. Я не верю, что проблема в источнике, но в способ, которым я использовал или wsdl2h, soap2cpp, или некоторую неправильную комбинацию флагов во время компиляции с g ++.
Спасибо, что заглянули, и, надеюсь, кто-нибудь решит проблему!
РЕДАКТИРОВАТЬ Я думаю, что я, возможно, решил это - используя 64-битную систему (и одну с большим объемом памяти). Я попытался скомпилировать с -m32 на X.6, но он не смог этого сделать (жалуется на проблемы с памятью).
Надеюсь, кто-нибудь наткнется на это и будет рад узнать ответ.