[Pb Compilation nc] : C'est quoi ' #ifdef ' ?

: C'est quoi ' #ifdef ' ? [Pb Compilation nc] - C - Programmation

Marsh Posté le 30-06-2003 à 12:48:33    

Salut,
 
voila j'ai recuperé les sources du programme 'netcat' sur le net et j'aurai souhaité le recompiler sous Windows avec Visual Studio.
 
Je ne me suis jamais vraiment aventuré a compiler sous Windows alors je vais decrire en details ce que j'ai fait en esperant que quelqu un sache pourquoi cela ne fonctionne pas;
 
J'ai ouvert dans un workspace commun les fichiers doexec.c;getopt.c et netcat.c et j ai precise un path supplementaire dans les options de visual pour getopt.h et generic.h
 
J'ai aussi rajoute dans "Object/library modules",le "wsock32.lib .
 
Voila,une fois tout ca effectué,je lance un "build all",puis j'execute mon netcat.exe crée.
Il n y aucune erreur ni aucun warning et si je tape un netcat -h,l'aide s'affiche correctement.
 
Par contre,le programme ne fonctionne pas,il ne me met pas de message d'erreur mais mes commandes n'ont pas d'effet  :sweat:  
 
Voila,si quelqu'un a une idee,qu'il n'hesite pas .
 
Merci


Message édité par bigstyle le 30-06-2003 à 20:45:32
Reply

Marsh Posté le 30-06-2003 à 12:48:33   

Reply

Marsh Posté le 30-06-2003 à 20:32:42    

Je viens de me rendre compte de quelque chose...
 
Apparement,tout fonctionne sauf une option qui est l'option -e qui ne s'affiche meme pas dans les options du programme (nc.exe -h)
 
Voila la partie du code correspondante à cette option :  
 
#ifdef GAPING_SECURITY_HOLE /* needs to be separate holler() */
  holler ("\
 -e prog  inbound program to exec " );
#endif
 
 
 
J'essaie donc de comprendre a quoi correspond ce #ifdef et comment il fonctionne.
J'ai lu que c'etait pour 'If defined';pour verifier qu'une variable existait mais en recherchant dans les sources je ne vois a aucun moment cette variable définie...
Voila...si quelqu un peut me venir en aide :)


Message édité par bigstyle le 30-06-2003 à 20:46:42
Reply

Marsh Posté le 30-06-2003 à 21:49:54    

Si tu veux pouvoir compiler le code présent entre des balises ifdef et endif, il te faut définir ce qu'il attend.
Comme tu l'as trouvé, ifdef est une abbréviation de "if defined" ; c'est à dire que le préprocesseur va lire ça comme cela : "Si quelque part GAPING_SECURITY_HOLE a été défini, alors je traîte ce qu'il y a après. Sinon, je saute après le endif correspondant."
 
Donc si tu veux que compiler cette partie du code, il faut définir quelque part GAPING_SECURITY_HOLE. Tu peux le définir soit dans un fichier traîté avant le fichier qui t'intéresse (avec un simple #define GAPING_SECURITY_HOLE) ou encore la mettre dans tes options de compilation.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 30-06-2003 à 22:03:40    

Merci gatorette,
 
j'ai eu quasiment a la seconde prés la meme info sur IRC :D
 
Bon ben maintenant faut que j'arrive a trouver ou se trouve cette option dans visual studio  :)

Reply

Marsh Posté le 01-07-2003 à 01:26:31    

Bon et ben c est bon je te remercie.
 
J'ai pu rajouter ce qui manquait et desormais ce qui ne s affichait pas fonctionne.
 
Enfin fonctionne...on va dire que l'aide s'affiche mais la fonction en elle-meme ne marche toujours pas :/
 
Je pense qu a moins de tomber sur quelqu un qui l'a deja compilé,ca sera pas facile de m'aider.
 
Parmi les fichiers pour les sources,il y a un fichier makefile.
Peut-on le rendre compatible avec visual studio ?

Reply

Marsh Posté le 01-07-2003 à 08:44:11    

bigstyle a écrit :


Parmi les fichiers pour les sources,il y a un fichier makefile.
Peut-on le rendre compatible avec visual studio ?


 
Automatiquement, j'en doute. Par contre, esssaye de regarder ce qu'il y a dedant (les #define et autres) pour reproduir à peu près la même chose avec Visual.

Reply

Marsh Posté le 01-07-2003 à 08:57:08    

El_gringo a écrit :


 
Automatiquement, j'en doute. Par contre, esssaye de regarder ce qu'il y a dedant (les #define et autres) pour reproduir à peu près la même chose avec Visual.


 
bah heuh tu peux lancer nmake sur le makefile [:spamafote]

Reply

Marsh Posté le 01-07-2003 à 08:57:55    

bigstyle > je te conseille d'installer cygwin sur ta machine si tu veux compiler ce genre de source. tu te feras certainement moins chier que de retoucher le makefile pour le rendre compatible avec VS


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 01-07-2003 à 08:59:11    

chrisbk a écrit :


 
bah heuh tu peux lancer nmake sur le makefile [:spamafote]

euh, oui mais non ! j'ai essayé une fois, sans toucher au makefile.... [:marc]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 01-07-2003 à 09:04:15    

ah, le peu que j'ai essayé ca a marché, mais j'imagine que le fait que c'etait des makefiles specialement prevu pour visu a jouer un role dans le succes de l'operation [:ddr555]

Reply

Marsh Posté le 01-07-2003 à 09:04:15   

Reply

Marsh Posté le 01-07-2003 à 10:27:43    

Pour revenir un peu sur NetCat, as-tu été voir ici ? Apparemment, il y a une version spécifique pour Windows avec le source.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 11-07-2003 à 12:55:49    

Une petite précision qui peut être  très importante:
 
Sous Linux, les sockets s'utilisent directement, puisqu'ils sont incorporés au système et à la libC.
 
Par contre sous windows, il faut passer par la lib winsock qui doit être initialisée au préalable. Opération merdique au possible. Donc prend la version windows si tu en trouves une, ou alors prépares-toi à en chier.

Reply

Sujets relatifs:

Leave a Replay

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