Votre question

Libws2_32.a : je dois la mettre ou?

Tags :
  • Tutoriel
  • Programmation
Dernière réponse : dans Programmation
26 Avril 2010 18:48:16

bonjour

Je suis en train de lire le tutoriel des sockets et je comprend pas ce que demande l'auteur ici

Citation :

Sur Windows


Tout d'abord, n'oubliez pas, dans chaque projet que vous créez, d'ajouter le fichier "ws2_32.lib" (pour le compilateur Visual C++) ou "libws2_32.a" (pour les autres) dans votre éditeur de liens. Vous trouverez ce fichier dans le dossier "lib" de votre IDE. J'insiste un peu, car on oublie très souvent de le faire


J'ai trouvé "libws2_32.a" mais ou je dois le mettre ? Avez vous un idée ?

PS: j'ai essayé de le mettre dans le projet code::block mais ça ne marche pas !

Autres pages sur : libws2 dois mettre

a b L Programmation
26 Avril 2010 20:06:01

Dans le répertoire de code::block, tu dois avoir un répertoire lib quelque part. Tu y mets ton .a
Ensuite, tu dois ajouter dans les paramètres de ton projet la bibliothèque (library) "libws_32.a", à la ligne de compilation, tu devrais avoir "-llibws2_32".
m
0
l
26 Avril 2010 20:19:00

merci CRicky

Oui dans la lib de code::block le fichier "libws2_32.a" se trouve déjà..

Le problème c'est que je comprends pas quand tu dis : il faut ajouter dans les paramètres du projet la bibliothèque "libws2_32.a"...
m
0
l
Contenus similaires
a b L Programmation
26 Avril 2010 20:34:14

En fait, ton fichier .a, c'est du code exécutable, c'est une partie de ton programme.
Lorsque tu compiles ton programme, au début, plusieurs fichiers objets (.o pour toi) sont créés et sont aussi du code exécutable.
A la fin de la compilation, il y a le lieur (linker) qui rassemble tout pour faire ton exécutable. C'est là qu'il faut lui indiquer de prendre ta bibliothèque .a
Pour faire ça, dans tous les IDE (comme code::block), il y a un endroit dans les paramètres de ton projet où tu indiques toutes les bibliothèques à lier. Donc, va dans les menus et cherche ces options.
m
0
l
26 Avril 2010 22:23:59

Merci pour ton aide.. mais hélas je trouve pas..!
m
0
l
27 Avril 2010 13:50:20

J'ai fais (sous codeblock) pour ajouter une bibliothèque à l'éditeur de liens, Project / Build Options... / linker settings puis add dans la partie link library, puis rechercher libws2_32.a


Mais ça ne marche toujours pas...

J'ai toujours plusieurs erreurs et warning lors de la compilation...

Citation :
ro\test\main.c||In function `main'
ro\test\\main.c|34|error: `SOCKADDR_IN' undeclared (first use in this function)|
ro\test\\main.c|34|error: (Each undeclared identifier is reported only once|
ro\test\\main.c|34|error: for each function it appears in.)|
ro\test\\main.c|34|error: syntax error before "sin"|
ro\test\\main.c|35|error: `SOCKET' undeclared (first use in this function)|
ro\test\\main.c|36|error: `socklen_t' undeclared (first use in this function)|
ro\test\\main.c|49|error: `sock' undeclared (first use in this function)|
ro\test\\main.c|49|warning: implicit declaration of function `socket'|
ro\test\\main.c|49|error: `AF_INET' undeclared (first use in this function)|
ro\test\\main.c|49|error: `SOCK_STREAM' undeclared (first use in this function)|
ro\test\\main.c|52|error: `INVALID_SOCKET' undeclared (first use in this function)|
ro\test\\main.c|57|error: `sin' undeclared (first use in this function)|
ro\test\\main.c|57|warning: implicit declaration of function `htonl'|
ro\test\\main.c|57|error: `INADDR_ANY' undeclared (first use in this function)|
ro\test\\main.c|59|warning: implicit declaration of function `htons'|
ro\test\\main.c|60|warning: implicit declaration of function `bind'|
ro\test\\main.c|60|error: `SOCKADDR' undeclared (first use in this function)|
ro\test\\main.c|60|error: syntax error before ')' token|
ro\test\\main.c|60|error: `recsize' undeclared (first use in this function)|
ro\test\\main.c|63|error: `SOCKET_ERROR' undeclared (first use in this function)|
ro\test\\main.c|66|warning: implicit declaration of function `listen'|
ro\test\\main.c|74|error: `csock' undeclared (first use in this function)|
ro\test\\main.c|74|warning: implicit declaration of function `accept'|
ro\test\\main.c|74|error: syntax error before ')' token|
ro\test\\main.c|74|error: `csin' undeclared (first use in this function)|
ro\test\\main.c|74|error: `crecsize' undeclared (first use in this function)|
ro\test\\main.c|75|warning: implicit declaration of function `inet_ntoa'|
ro\test\\main.c|75|warning: format argument is not a pointer (arg 3)|
ro\test\\main.c|85|warning: implicit declaration of function `closesocket'|
||=== Build finished: 20 errors, 9 warnings ===|
m
0
l
27 Avril 2010 17:25:28

up..
m
0
l
a b L Programmation
27 Avril 2010 20:54:49

Ah oui, là c'est avant le problème du linker, c'est un problème de compilation, parce que tu n'as pas inclus les fichier .h qui définissent toutes les structures et nom de fonctions. Donc, mets le #include <le_fichier.h> qui va bien là.

ps: pas besoin de faire un Up au bout de quelques heures... (si ça m'énerve trop, je risque de ne plus répondre :)  )
m
0
l
27 Avril 2010 21:39:03

Oui désolé du up...

<le_fichier.h> s'appelle ainsi? si non ou je peut trouvé ces fichier ?

Merci
m
0
l
a b L Programmation
27 Avril 2010 22:24:32

non, il faut que tu mettes le bon nom de fichier, par exemple Winsock2.h
m
0
l
27 Avril 2010 22:57:09

C'est déjà fait..

Voici mon code pour mieux comprendre le problème :

  1. #if defined (WIN32)
  2. #include <winsock2.h>
  3. typedef int socklen_t;
  4. #elif defined (linux)
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <unistd.h>
  10. #define INVALID_SOCKET -1
  11. #define SOCKET_ERROR -1
  12. #define closesocket(s) close(s)
  13. typedef int SOCKET;
  14. typedef struct sockaddr_in SOCKADDR_IN;
  15. typedef struct sockaddr SOCKADDR;
  16. #endif
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #define PORT 23
  21.  
  22.  
  23.  
  24. int main(void)
  25. {
  26. #if defined (WIN32)
  27. WSADATA WSAData;
  28. int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
  29. #else
  30. int erreur = 0;
  31. #endif
  32.  
  33. /* Socket et contexte d'adressage du serveur */
  34. SOCKADDR_IN sin;
  35. SOCKET sock;
  36. socklen_t recsize = sizeof(sin);
  37.  
  38. /* Socket et contexte d'adressage du client */
  39. SOCKADDR_IN csin;
  40. SOCKET csock;
  41. socklen_t crecsize = sizeof(csin);
  42.  
  43. int sock_err;
  44.  
  45.  
  46. if(!erreur)
  47. {
  48. /* Création d'une socket */
  49. sock = socket(AF_INET, SOCK_STREAM, 0);
  50.  
  51. /* Si la socket est valide */
  52. if(sock != INVALID_SOCKET)
  53. {
  54. printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock);
  55.  
  56. /* Configuration */
  57. sin.sin_addr.s_addr = htonl(INADDR_ANY); /* Adresse IP automatique */
  58. sin.sin_family = AF_INET; /* Protocole familial (IP) */
  59. sin.sin_port = htons(PORT); /* Listage du port */
  60. sock_err = bind(sock, (SOCKADDR*)&sin, recsize);
  61.  
  62. /* Si la socket fonctionne */
  63. if(sock_err != SOCKET_ERROR)
  64. {
  65. /* Démarrage du listage (mode server) */
  66. sock_err = listen(sock, 5);
  67. printf("Listage du port %d...\n", PORT);
  68.  
  69. /* Si la socket fonctionne */
  70. if(sock_err != SOCKET_ERROR)
  71. {
  72. /* Attente pendant laquelle le client se connecte */
  73. printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT);
  74. csock = accept(sock, (SOCKADDR*)&csin, &crecsize);
  75. printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));
  76. }
  77. else
  78. perror("listen");
  79. }
  80. else
  81. perror("bind");
  82.  
  83. /* Fermeture de la socket client et de la socket serveur */
  84. printf("Fermeture de la socket client\n");
  85. closesocket(csock);
  86. printf("Fermeture de la socket serveur\n");
  87. closesocket(sock);
  88. printf("Fermeture du serveur terminée\n");
  89. }
  90. else
  91. perror("socket");
  92.  
  93. #if defined (WIN32)
  94. WSACleanup();
  95. #endif
  96. }
  97.  
  98. return EXIT_SUCCESS;
  99. }
m
0
l
28 Avril 2010 13:44:52

Merci il fallait mettre _WIN32..

J'ai crée 2 projets (sous code::block) Serveur et Client pour tester, mais pourquoi quand je compile c'est le 2eme projets (Client) qui s'exécute ?

Comment compilé le projets Serveur et Client l'un après l'autre?
m
0
l
a b L Programmation
28 Avril 2010 20:47:13

En ce qui me concerne, je ne connais pas suffisamment code::block pour répondre à ta question (c'est un problème d'IDE pas de compilation :p  ).
m
0
l
29 Avril 2010 14:40:07

Merc ia vous c'est bon j'ai trouvé..

Comment faire une connexion distante a partir d'un code source serveur et client ?

Y a t-il une personne qui peut jouer le rôle du client pour essayer une connexion distante en envoyant un petit message ?
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS