Problème winsock2.h et ws2_32.lib

Signaler
Messages postés
11
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
18 mars 2009
-
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
-
Bonjour,

Pour une application j'ai besoin d'implémenter un serveur et un client UDP. Je n'ai pas de problème en ce qui concerne les fonctions à utiliser. En revanche, j'ai des problème au niveau du link des librairie.

J'utilise Visual Studio 2008
J'ai mis le #include <winsock2.h>
J'ai ajouté ws2_32.lib au linker pour la compilation (additional dependencies).

Lors du linking j'obtiens l'erreur suivante:
fonctions.obj : error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function "void __cdecl saisir_port(struct sockaddr_in *)" (?saisir_port@@YAXPAUsockaddr_in@@@Z)

et ça pour chaque fonction du socket que j'utilise (listen, sendto, recvfrom, inet_addr, etc).

Quand j'ajoute #pragma comments(lib,"ws_32.lib") j'obtiens l'erreur suivante:
warning C4068: unknown pragma

Que faire?

merci d'avance..

12 réponses

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Salut,

J'ai une petite appli de test (MFC), et j'ai pas de souci, je dirais même que ws2_32.lib est par défaut (contrairement à VC6).
Quel est ton genre de projet ? MFC,Win32, console ?
Messages postés
11
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
18 mars 2009

C'est sur une console.

Mais c'est quoi exactement la différence entre Win32 et console? et c'est quoi MFC?
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
En gros ca ne change pas les mêmes bibliothèsques par défaut.

Je viens de faire un test avec Console.
Par défaut, j'ai l'erreur. Mais quand j'ajoute ws2_32.lib dans les dépendances, ça link bien.

je comprends pas ton pb, tu n'as pas fait une erreur bête style faute de frappe ? (ca m'arrive )
Messages postés
11
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
18 mars 2009

Je ne fais pas de faute de frappe... non je déconne, mais j'ai bien vérifié.

Par contre j'ai essayé autre chose et ça devient vraiment louche:
Sur mon PC j'ai visual studio c++ 2008, j'ai copier le projet sur un autre PC avec Visual C++ 6.0 et ça marche (en ajoutant ws2_32.lib dans les dépendances du linker)

Où doit se trouver le fichier ws2_32.lib? on le laisse dans system32 et le linker va le chercher ou il faut l'avoir dans le dossier des codes sources? et pour winsock2.h?
Et est-ce que l'ajout de la dépendance est casse sensitive? j'ai fait quelques essais et ça change rien.

Dans les options du linker est-ce qu'il faut changer "Additional library Directories"?

L'interface de modification des propriétés du projet est différentes entre la version 2008 et la 6.0; peut-etre qu'il faut changer autre chose?
Messages postés
11
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
18 mars 2009

En fait je me demande si j'ai pas un problème d'imbrication des includes (ça devrait pas comme ça marche sur l'autre PC mais bon..)
J'ai 3 fichiers:
=> main.cpp:
#include <winsock2.h>
#include <stdio.h>
#include "fonctions_utilisateur.h"
void main() {
}

=> fct_user.cpp:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include "fct_user.h

=> fct_user.h:
#include <winsock2.h>
Messages postés
11
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
18 mars 2009

petite erreur de copie du code précédent, dans main.cpp:
#include <winsock2.h>
#include <stdio.h>
#include "fct_user.h"
void main() {
}
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
En effet tu dois avoir un pb avec ton environnement.

Je viens de regardé dans les options de VS2008, rubrique VC++ Directories. Je ne sais pas trop ce que tu as dedans, mais pas evident de comparer nos config.
Sinon, as-tu essayé de claqué le chemin complet ? "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\ws2_32.lib" ?
J'ai vc6 et VS 2008 sur la meme machine, donc j'ai du mal savoir si "C:\Program Files\Microsoft SDKs\Windows" existe avec VS2008 seul.

Sinon, méthode pas propre, tu rapatries la lib du poste vc6.
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Ah oui gaffe à winsock2.h qui n'aime pas la double déclaration avec windows.h, je faut faire attention à l'ordre, mais je ne sais plus lequel est le bon
Messages postés
11
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
18 mars 2009

Avec VS2008 seul y'a bien C:\Program Files\Microsoft SDKs\Windows. Et après y'a les 2 dossier v5.0 et v6.0A.

J'ai essayé en mettant le chemin complet dans les options du linker et l'erreur a changé:

1>Linking...
1>LINK : fatal error LNK1181: cannot open input file 'C:\Program.obj'

Alors là je vois pas du tout ce qu'il veut? D'où peut venir une erreur pareil?

Je vais encore essayer de changer un peu les includes pour voir.
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Ah la la !! C'est le manque d'expérience ça !!!

Il y a des espaces dans ton chemin, donc il faut mettre les guillements comme dans l'exemple que je t'ai mis.
Messages postés
11
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
18 mars 2009

ok j'ai mis les guillemets et les erreurs de départ sont de retour...
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Là je sèche !!