Невозможно скомпилировать приложение Qt Symbian, которое использует gSOAP - PullRequest
1 голос
/ 08 сентября 2010

Я использую gSOAP вместе с Qt для Symbian.

Под эмулятором приложение компилируется нормально, но когда я меняю цель компилятора для компиляции для устройства, я получаю следующую ошибку.

WARNING: Can't find following headers in System Include Path 
<netinet\tcp.h> 

Это включается из файла stdsoap2.h следующим образом:

#ifndef WITH_NOIO
# ifndef WIN32
#  ifndef PALM
#   include <sys/socket.h>
#   ifdef VXWORKS
#    include <sockLib.h>
#    include <selectLib.h>
#    ifndef _WRS_KERNEL
#     include <strings.h>
#    endif
#   else
#    ifndef SYMBIAN
#     include <strings.h>
#    endif
#   endif
#   ifdef SUN_OS
#    include <sys/stream.h>     /* SUN */
#    include <sys/socketvar.h>      /* SUN < 2.8 (?) */
#   endif
#   ifdef VXWORKS
#    ifdef _WRS_KERNEL
#     include <sys/times.h>
#    endif
#   else
#    include <sys/time.h>
#   endif
#   include <netinet/in.h>
#   ifdef OS390
#    include <netinet/tcp_var.h>
#   else
#     include <netinet/tcp.h>          /* TCP_NODELAY */
#   endif
#   include <arpa/inet.h>
#  endif
# endif
#endif

Я в тупике! Файл не может быть найден нигде ..

Ответы [ 2 ]

2 голосов
/ 13 сентября 2010

Чтобы наконец-то все заработало, мне пришлось портировать gSOAP, чтобы использовать stdapis вместо libc. Я удалил одну из <netinet\tcp.h> строк и использовал <sys/select.h>.

Портированный файл stdsoap2.h можно найти по адресу http://pastebin.com/xnrDbfFa.

Я также обнаружил, что Symbian не загружает STL по умолчанию, поэтому все мои методы, которые возвращали std::vector и std::string, теперь не компилируются.

Вместо того чтобы выбрать флаг -s для отключения использования STL, я добавил порт Symbian STL к INCLUDEPATH в файле .pro, например

symbian {
    INCLUDEPATH += $$EPOCROOT\epoc32\include\stdapis\stlport
    INCLUDEPATH += $$EPOCROOT\epoc32\include\stdapis\stlport\stl
}

А в soapStub.h пришлось включить

#include <vector>
#include <string>

Также вам необходимо изменить typemap.dat и добавить следующее, чтобы иметь возможность компилировать.

# Symbian specific
xsd__dateTime = | std::string
xsd__long = | long
xsd__unsignedLong = | unsigned long
xsd__int = | int

В противном случае компилятор будет жаловаться на

'soap_outdateTime' was not declared in this scope 
'soap_indateTime' was not declared in this scope 

, поскольку в Symbian gSOAP создается с флагом WITH_LEAN, поэтому некоторые вещи отключены (например, не поддерживается сериализация time_t и не поддерживается сериализация LONG64 / ULONG64) требуется typemap.dat переопределяет выше.

Наконец, для дальнейшего использования, вот аргументы командной строки, которые я использовал для генерации файлов:

wsdl2h.exe -o service.h http://myservicelocation.com/DataDisplayingWCF.svc?wsdl

А потом:

soapcpp2.exe -I "C:\gsoap-2.7\gsoap\custom;C:\gsoap-2.7\gsoap\import" "service.h" -ixw

Вы также можете настроить пространства имен в typemap.dat и выполнить регенерацию с помощью wsdl2h.

2 голосов
/ 08 сентября 2010

Этот заголовок предоставляется S60 SDK и находится здесь:

%EPOCROOT%\epoc32\include\libc\netinet\tcp.h

Для правильного разрешения #include <netinet\tcp.h>, следовательно, ваш файл MMP должен содержать следующую строку:

SYSTEMINCLUDE /epoc32/include/libc
...