[C++]passage linux -> windows

passage linux -> windows [C++] - C++ - Programmation

Marsh Posté le 31-12-2004 à 20:07:19    

J'ai un pb qui tourne tres bien sous linux, il utilise les socket (entre autre).
Normalement il ne devrait pas y avoir de problemes pour le compiler sous windows a part quelques includes.
 
J'ai 2 petits problemes:

Code :
  1. c:\docume~1\ffomni~1\bureau\rezo\serveur.cpp: In function `void envoie_liste_contact(int)':
  2. c:\docume~1\ffomni~1\bureau\rezo\serveur.cpp:52: implicit declaration of function `int usleep(...)'
  3. c:\docume~1\ffomni~1\bureau\rezo\serveur.cpp: In function `int main()':
  4. c:\docume~1\ffomni~1\bureau\rezo\serveur.cpp:354: `socklen_t' undeclared (first use this function)
  5. c:\docume~1\ffomni~1\bureau\rezo\serveur.cpp:354: (Each undeclared identifier is reported only once
  6. c:\docume~1\ffomni~1\bureau\rezo\serveur.cpp:354: for each function it appears in.)
  7. c:\docume~1\ffomni~1\bureau\rezo\serveur.cpp:354: parse error before `='
  8. c:\docume~1\ffomni~1\bureau\rezo\serveur.cpp:412: `longueur' undeclared (first use this function)


 
Voici les includes:

Code :
  1. #if defined(WIN32)
  2.    
  3. #else
  4.      #include <sys/socket.h>
  5.      #include <arpa/inet.h>
  6.      #include <netinet/in.h>
  7.      #include <netdb.h>
  8. #endif
  9. #include <pthread.h>
  10. #include <stdlib.h>
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include <unistd.h>
  14. #include "./serveur.h"


 
Bon alors comme vous pouvez le voir je n'inclue rien de particulier pour windows pour le moment.
 
Apparemment j'ai usleep() qui pose pb,j'inclue bien "unistd.h" donc apparemment ca ne viendrais pas de là.
 
Le deuxième probleme est "socklen_t" qui lui n'est clairement pas definie, donc il manque un include mais lequel? J'ai un peu fouillé le web et le dossier include sans rien trouver :(
 
Sinon j'ai quand mm resolue un pb, il s'agissait des pthread, voici la page contenant les sources necessaire lors de la compilation:
http://sources.redhat.com/pthreads-win32/
 
il n'y a rien de bien  particulier sur ces lignes
 

Code :
  1. void envoie_liste_contact(int pos)
  2. {
  3. int i;
  4. for(i=0;i<tab_connect[pos].get_nb_contact();i++)
  5. {
  6. usleep(100000); //ligne 52
  7. send(tab_connect[pos].get_socket(),tab_connect[pos].get_contact(i),strlen(tab_connect[pos].get_contact(i))+1,0);
  8. }
  9. usleep(100000);
  10. send(tab_connect[pos].get_socket(),"FinListe",9,0);
  11. }


 

Code :
  1. int sock_client;
  2. int options=-1;
  3. socklen_t longueur=sizeof(client);//ligne 354


 
Le post original est sur PPC:
http://forum.presence-pc.com/prese [...] 1272-1.htm

Reply

Marsh Posté le 31-12-2004 à 20:07:19   

Reply

Marsh Posté le 31-12-2004 à 20:16:26    

C'est une définition récente, non incorporée dans Winsock2.
Dans ton code, fais un:

Code :
  1. typedef size_t socklen_t;


Et ça devrait aller.  
 
N'oublie pas le WSAStartup() au début de ton code :)

Reply

Marsh Posté le 31-12-2004 à 20:23:41    

Je vais regarder sur le net a quoi sert WSAStartup() mais c'est util sous Linux ?
 
C'est bon j'ai trouve ce n'est pas utili sous linux ;)


Message édité par ffomnislash le 31-12-2004 à 20:26:17
Reply

Marsh Posté le 31-12-2004 à 20:26:09    

Non, c'est uniquement pour Windows. Et c'est nécessaire...

Reply

Marsh Posté le 31-12-2004 à 20:35:01    

bon ok j'ai plus de probleme avec les socket,
je n'ai plus qu'une seul erreur:
 
serveur.cpp:37: implicit declaration of function `int usleep(...)'
 
a la ligne 37 j'ai simplement:
usleep(100000);
 
Si je met cette ligne en commentaire l'erreur ce repercute sur le usleep() suivant


Message édité par ffomnislash le 31-12-2004 à 20:39:21
Reply

Marsh Posté le 31-12-2004 à 21:03:40    

Y a pas de usleep sous windows. Donc soit tu utilises sleep (en secondes), soit tu utilises (sous Windows uniquement) Sleep, en millisecondes:
 
http://msdn.microsoft.com/library/ [...] /sleep.asp

Reply

Marsh Posté le 31-12-2004 à 21:13:58    

ok ce que je vais faire
 
je fait utiliser usleep() avec des pause >= 1 milliseconde
et sous win je vait ecrire usleep() qui appellera Sleep() :D


Message édité par ffomnislash le 31-12-2004 à 21:14:18
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed