2010-09-08 22 views
1

J'utilise gSOAP avec Qt pour Symbian.Impossible de compiler l'application Qt Symbian qui utilise gSOAP

Sous l'émulateur, l'application compile bien, mais lorsque je change la cible du compilateur à compiler pour le périphérique, j'obtiens l'erreur suivante.

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

Ce sera inclus dans le fichier stdsoap2.h comme suit:

#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 

Je suis perplexe! Le fichier ne peut être trouvé nulle part ..

Répondre

2

pour enfin fonctionner, je devais utiliser le port gSOAP stdapis au lieu de libc. J'ai supprimé l'une des lignes <netinet\tcp.h> et utilisé <sys/select.h> à la place.

Vous pouvez trouver le fichier porté au http://pastebin.com/xnrDbfFa.

J'ai également découvert que Symbian ne charge pas STL par défaut, donc toutes mes méthodes qui retournaient std::vector et std::string ne sont pas en train de compiler.

Au lieu d'opter pour le drapeau -s pour désactiver l'utilisation de la STL, j'ai ajouté le port STL Symbian au INCLUDEPATH dans le fichier .pro comme si

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

Et dans le soapStub.h je devais inclure

#include <vector> 
#include <string> 

Aussi, vous devez modifier votre typemap.dat et ajouter ce qui suit afin de pouvoir compiler.

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

Sinon, le compilateur se plaindra

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

depuis sous Symbian, gSOAP est construit avec le drapeau WITH_LEAN, d'où certaines des choses sont désactivées (par exemple, pas de support pour time_t sérialisation et pas prise en charge de la sérialisation LONG64/ULONG64), d'où les remplacements typemap.dat requis ci-dessus.

Enfin, pour référence, voici les arguments de ligne de commande que j'ai utilisé pour générer les fichiers:

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

Et puis:

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

Vous pouvez également configurer les espaces de noms typemap.dat et régénérer en utilisant wsdl2h.

+0

hey, merci pour votre réponse, il a beaucoup aidé, seulement je continue à obtenir les erreurs soap_outdateTime et soap_indateTime, pourriez-vous poster votre fichier typemap.dat? – Berty

+0

Malheureusement, je n'ai plus accès à ce fichier. – sabbour

+0

J'ai suivi toutes vos instructions, mais je reçois toujours l'erreur 'soap_outdateTime', des idées que je fais mal? – Berty

2

Cet en-tête est fourni par le SDK S60, et se trouve ici:

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

Afin de résoudre correctement #include <netinet\tcp.h> donc votre fichier RPM devra contenir les éléments suivants ligne:

SYSTEMINCLUDE /epoc32/include/libc 
+0

Savez-vous comment écrire dans le fichier .pro? J'ai essayé ce qui suit, mais cela n'a pas fonctionné: INCLUDEPATH + =/epoc32/include/libc – sabbour

+0

Je viens de tester l'ajout de 'INCLUDEPATH + =/epoc32/include/lib' à mon fichier .pro, couru qmake, et le Le fichier .mmp généré contient 'SYSTEMINCLUDE/epoc32/include/libc'. Quelle version de Qt utilisez-vous? –

+0

J'utilise 4.6.3 – sabbour