我正在使用gSOAP和Qt for 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
我很难过!无法在任何地方找到该文件..
答案 0 :(得分:2)
此标题由S60 SDK提供,位于:
%EPOCROOT%\epoc32\include\libc\netinet\tcp.h
因此,为了正确解析#include <netinet\tcp.h>
,您的MMP文件需要包含以下行:
SYSTEMINCLUDE /epoc32/include/libc
答案 1 :(得分:2)
为了最终使其工作,我不得不移植gSOAP以使用stdapis
而不是libc
。我删除了其中一条<netinet\tcp.h>
行并改为使用<sys/select.h>
。
您可以在http://pastebin.com/xnrDbfFa找到移植的stdsoap2.h
文件。
我还发现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
/ { {1}}序列化)因此上面需要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
重新生成。