Problème d'inclusion de bibliothèques

JCShaolan Messages postés 18 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 9 juin 2005 - 9 mars 2005 à 23:10
JCShaolan Messages postés 18 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 9 juin 2005 - 11 mars 2005 à 17:23
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

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
10 mars 2005 à 09:04
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
0
Vulpetrus Messages postés 70 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 21 décembre 2005
10 mars 2005 à 13:21
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+
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
10 mars 2005 à 15:08
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
0
Vulpetrus Messages postés 70 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 21 décembre 2005
10 mars 2005 à 15:36
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

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
10 mars 2005 à 19:44
sans rancune, comme tu l'a dit sur l'autre page

juste bcp de fatigue...

des cotés je crois

@+

Nono
0
JCShaolan Messages postés 18 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 9 juin 2005
10 mars 2005 à 22:07
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.
@+
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
11 mars 2005 à 09:17
à 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.
0
Vulpetrus Messages postés 70 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 21 décembre 2005
11 mars 2005 à 11:01
une fin comme je les aime : qui se termine bien ! ;)



++
0
JCShaolan Messages postés 18 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 9 juin 2005
11 mars 2005 à 17:23
ok merci pour votre aide ++
0
Rejoignez-nous