Problème d'inclusion de bibliothèques

Signaler
Messages postés
18
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
9 juin 2005
-
Messages postés
18
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
9 juin 2005
-
Bonjour, en fait je souhaite inclure différentes bibliothèques de fonctions suivants que je sois sous Linux ou Windows et la seule méthode que j'ai trouvé pour faire cela est la suivante :

#ifdef _WINDOWS _ //windows
#include <windows.h>
#include <winsock.h>
#else //Linux
#include <sys/socket.h>
#include <resolv.h>
#include
#endif

Seulement voilà, si je fais ainsi, quand je vais compiler, cela va me mettre des erreurs comme quoi certaines bibiothèques n'existent pas.
En effet, si je suis sous windows, le compilateur va m'indiquer que les bibliothques socket.h, resolv.h et inet.h n'existent pas.
Si je suis sous linux, le compilateur me dira que les bibliothèques windows.h et winsock.h n'existent pas.

Si quelqu'un sait comment résoudre ce problème ... Merci.

9 réponses

Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
je n'ai pas ce pb avec VC6



mais eVC4 le signale...



ceci dit, j'utilise la variable suivante : _WIN32



est-ce que ton _WINDOWS _ est standard?



Magicalement
Messages postés
70
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
21 décembre 2005

merci pour le commentaire magic, encore un qui ne fait pas avancer grand chose !



en fait shaolan, le problème est : es-tu sûr d'avoir défini le paramètre _WINDOWS _ avant la compilation ?

Parce que s'il n'est pas défini quand tu compile (même sous unix), il va tester le
#ifdef _WINDOWS _ , ce param n'ayant pas été défini il n'entre pas... par contre il execute le reste :


#else
//Linux
#include <sys/socket.h>
#include <resolv.h>
#include
#endif



en général on fait plutôt :




#ifdef _WINDOWS _ //windows
#include <windows.h>
#include <winsock.h>


#endif


#ifdef _LINUX_
//Linux
#include <sys/socket.h>
#include <resolv.h>
#include
#endif



si tu ne définis aucun de ces deux paramètres :
_WINDOWS _ et
_LINUX_ , à la compilation, aucuns headers contenus dans les if ne seront chargés !



donc définis avec quelle variable de compilation tu veux travailler dans ton makefile.



a+
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Vulpetrus : effectivt, _WINDOWS_ n'est pas défini en standard comme l'est _WIN32

je vais redire car visiblement tu n'as pas compris



VC6 ne regarde pas du tout ce qui n'est pas défini (ie dans un ifdef non déclaré)

à la différence de eVC4 qui analyse tout





il me semble que gcc ainsi que les autres compilo ont le mm
comportement que VC6 en ignorant les sections non définies. sans les
warnings



donc ton code, ne résoud pas du tout le pb soulevé par
JCShaolan. sa question était générique pour comprendre. (sauf erreur)



Mais en tt cas, merci pour ta contrib à essayer de faire avancer le schlimblick

++

Nono
Messages postés
70
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
21 décembre 2005

c'est pas parce que je m'en suis pris à toi que tu ne dois pas rester objectif nono !

primo : lis moi d'abord avant de m'incendier !

deuxio : je n'ai jamais dit que mon code résolvait qquechose. ( c'était plutôt une correction)

tertio : je lui ai expliqué clairement comment résoudre le problème ( il doit définir ses variables de compilation ).

quatro : je pense que ça fait une belle jambe à Shaolan de savoir qu'avec evc4 ça marche !



bon voilà... en fait je t'en veux pas nono, mai si tu prends les forums
pour des champs de bataille, je pense que je ne vais plus avoir envie
de passer sur celui-ci

++
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
sans rancune, comme tu l'a dit sur l'autre page

juste bcp de fatigue...

des cotés je crois

@+

Nono
Messages postés
18
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
9 juin 2005

Merci pour votre aide mutuelle mais je crois que cela marche en mettant cela (comme tu m'avait indiquer Vulpetrus) :

#ifdef _WINDOWS_
#include <windows.h>
#include <sock.h>
#ifdef _LINUX_
#include <Linsock.h>
#include <sys/socket.h>
#include <resolv.h>
#include
#endif
#endif

par contre, le seul truc que je ne comprend pas q'est que si je ne mets pas 2 #endif ca ne marche pas il me di : "unexpected end of file found". Donc voila mai l'essentiel c que ca marche donc Merci.
@+
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
à chaque #if doit correspondre une fin cad un endif



c'est comme des accolades





#ifdef _WINDOWS_
#include <windows.h>
#include <sock.h>
#ifdef _LINUX_
#include <Linsock.h>
#include <sys/socket.h>
#include <resolv.h>
#include
#endif//LINUX
#endif
//WINDOWS



et là, ce qu'on voit c'est que l'environnement X ne peut etre défini que si l'environnement windows est défini

ce qui ne me semble pas juste.



vois plutot la chose ainsi:




#ifdef _WINDOWS_
#include <windows.h>
#include <sock.h>
#else // ! WINDOWS

#ifdef _LINUX_
#include <Linsock.h>
#include <sys/socket.h>
#include <resolv.h>
#include
#endif//LINUX
#endif
// !WINDOWS



Magicalement

Nono.
Messages postés
70
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
21 décembre 2005

une fin comme je les aime : qui se termine bien ! ;)



++
Messages postés
18
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
9 juin 2005

ok merci pour votre aide ++