1

Qt for Symbian と一緒にgSOAPを使用しています。

エミュレーターでは、アプリケーションは正常にコンパイルされますが、コンパイラーのターゲットをデバイス用にコンパイルするように変更すると、次のエラーが発生します。

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

私は困惑しています!ファイルがどこにも見つかりません..

4

2 に答える 2

2

最終的に機能させるには、 gSOAP を移植してstdapisの代わりに使用する必要がありlibcました。行の 1 つを削除し、代わりに<netinet\tcp.h>使用しました。<sys/select.h>

移植されたstdsoap2.hファイルはhttp://pastebin.com/xnrDbfFaにあります。

また、Symbian はデフォルトで STL をロードしないことも発見しました。そのため、返されていたすべてのメソッドがstd::vectorコンパイルstd::stringされていません。

STL の使用を無効にするフラグを選択する代わりに、次のよう-sに 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

于 2010-09-13T18:27:07.547 に答える
2

このヘッダーは S60 SDK によって提供され、次の場所にあります。

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

したがって、正しく解決する#include <netinet\tcp.h>には、MMP ファイルに次の行を含める必要があります。

SYSTEMINCLUDE /epoc32/include/libc
于 2010-09-08T14:34:45.857 に答える