[C] Compiler un code C (from linux) avec un compiler win

Compiler un code C (from linux) avec un compiler win [C] - C - Programmation

Marsh Posté le 06-11-2004 à 10:34:49    

Salut
 
j'ai récupéré un code source .c prévu pour linux. Le programme est court, il fait 50/100 lignes. J'ai fait du C dans ma jeunesse ( :lol: ) mais c'etait en environnement windows (genre Turbo C compiler)... J'ai encore pas mal de souvenir, et me semblait bien qu'on avait des fichiers d'entete, mais dans ce source, il n'y en a aucun (peut etre une particularité de la compilation sous linux ?).
 
Bref, j'ouvre le code avec un Borland C++ builder et évidemment :
 
 
1/ il ne trouve pas la plupart des fonctions (mathématiques en général) qui sont utilisés
 
2/ il reconnait certaines déclarations de type :       TypeInt *tab;
 
 
 
 
Si vous aviez un ou deux conseils :ange:  :hello:  
 
 [:cutter]  [:cutter]  [:cutter]  [:cutter]


---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 10:34:49   

Reply

Marsh Posté le 06-11-2004 à 10:56:16    

fait péter le code qu'on voit la tronche du truc :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 06-11-2004 à 11:03:56    

Ouaip, on est Samedi, et Samedi c'est : "Kadreg joue à réécrire les programmes pour qu'ils en passent plus au Round-trip d'Objecteering". :lol:

Reply

Marsh Posté le 06-11-2004 à 11:05:33    

Pourquoi, c'est pas une saine occupation ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 06-11-2004 à 11:21:13    

attention  [:zytrahus5]  
 
 
 

Code :
  1. #define S32BITS
  2. #define TypInt long
  3. #define NBOCT   4
  4. #define BASE1 1000000L
  5. #define BASE2 100000L
  6. #define BASE3 10000L
  7. #define NBZ1 6
  8. #define NBZ2 5
  9. #define NBZ3 4
  10. #define NBIT2 11
  11. #define GBASE1 10
  12. #define GBASE2 12
  13. #define GBASE3 14
  14. #define LIMP1 1501
  15. #define LIMP2 15001
  16. #define LIMP3 150001
  17. #define LOGb10_2 0.30103
  18. TypInt *resul;
  19. TypInt *resul1;
  20. TypInt *resul2;
  21. int K;
  22. int MAX, MAXB;
  23. int BASE;
  24. int GBASE;
  25. int I, J;
  26. main(argc,argv)
  27. int argc;
  28. char *argv[];
  29. {
  30. int k, i, B2;
  31. int lim, limb; /* NOMBRE DE DECIMALES DEMANDEES */
  32. int NB;
  33. int Dec; /* 2^Dec = 1 << Dec */
  34. char *nam;
  35. nam = argv[0];
  36. B2 = 0;
  37. --argc; ++argv;
  38. lim = 0;
  39. while(argc) {
  40.  if(*argv[0] == '-') {
  41.   switch(*(argv[0] + 1)) {
  42.    case '2':
  43.     B2 = 1;
  44.     break;
  45.    default:
  46.     Us(nam);
  47.     break;
  48.   }
  49.  }
  50.  else
  51.   lim=atoi(argv[0]);


 
 
c'est juste le début :o rien que là ça appelle déjà 3 ou 4 fonctions non référencées :/
 
le code tel qu'il est marche sous nux, testé hier soir par un copain...


Message édité par zytrahus5 le 06-11-2004 à 11:27:44

---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 11:26:11    

Ouais ouais, prend nous pour des mickeys. Je me suis arreté à la ligne 4, il manque déjà un e dans TypeInt. Donc je doute que ça compile sous line uxe.
 
D'autre part, c'est du C K&R, donc remplace déjà la ligne 33 à 36 par:
int main(int argc, char *argv[])

Reply

Marsh Posté le 06-11-2004 à 11:29:18    

:o j'avais testé en déclarant uniquement des Long a la place des typint pour voir si ca changeait quelque chose :o
et non ça change rien sous win, et en remettant les typint, j'ai ajouté un e en les déclarant, Mickey [:joce]
 
 
 
 
 
C K&R :/


---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 11:32:43    

Code :
  1. int main(int argc, char *argv[])
  2. int argc;
  3. char *argv[];


 
la premiere erreur est sur la déclaration du int argc [:le kneu]
 
ensuite ça passe auxc fonctions non définies ( Us, atoi, exit...)
 
 
le fait que ce soit du C K&R ça signifie que c'est inutilisable ?


Message édité par zytrahus5 le 06-11-2004 à 11:32:59

---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 11:34:49    

Eh, j'ai dit remplace la ligne 33 à 36. Donc tu dégages le int argc et la ligne d'après.
 
Le fait que ce soit du K&R fait que les compilos rechignent à compiler ça. Il faut que tu regardes dans le doc de ton compilo comment faire pour qu'il accepte du C K&R (ou au pire, qu'il ne soit pas strict sur la norme ANSI).

Reply

Marsh Posté le 06-11-2004 à 11:34:51    

sinon tu peux essayer de compiler avec djgpp, c'est un portage de gcc sur les plateformes win32

Reply

Marsh Posté le 06-11-2004 à 11:34:51   

Reply

Marsh Posté le 06-11-2004 à 11:35:50    

couak a écrit :

sinon tu peux essayer de compiler avec djgpp, c'est un portage de gcc sur les plateformes win32


C'est mort djgpp. Tu veux dire Mingw ?  
Et je confirme, j'ai un peu de code assez vieux, et ça passe avec GCC.

Reply

Marsh Posté le 06-11-2004 à 11:35:54    

Lam's a écrit :

Eh, j'ai dit remplace la ligne 33 à 36. Donc tu dégages le int argc et la ligne d'après.
 
Le fait que ce soit du K&R fait que les compilos rechignent à compiler ça. Il faut que tu regardes dans le doc de ton compilo comment faire pour qu'il accepte du C K&R (ou au pire, qu'il ne soit pas strict sur la norme ANSI).

ok vais essayer d'aller me renseigner sur ce que le C K&R déjà


---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 11:49:35    

Lam's a écrit :

C'est mort djgpp. Tu veux dire Mingw ?  
Et je confirme, j'ai un peu de code assez vieux, et ça passe avec GCC.

MinGW c'est compileur qui fonctionne sous windows pour compiler un code C pour nux ? :??:


---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 12:13:29    

j'ai réussi a le compiler avec minGW, ça a marché sans tortiller. (a partir du code original)
 
Maintenant si je veux faire de ce programme, un truc plus convivial, faire une petite interface graphique, comment il faut que je m'y prenne pour palier aux erreurs que j'ai dans un compileur plus moderne comme C++ builder ?


---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 12:16:15    

Tu vas voir www.wxwidgets.org pour continuer à utiliser MinGW. En plus ton code sera portable vers Linux.

Reply

Marsh Posté le 06-11-2004 à 12:20:48    

Lam's a écrit :

Tu vas voir www.wxwidgets.org pour continuer à utiliser MinGW. En plus ton code sera portable vers Linux.

Citation :

An open source C++ GUI framework to make cross-platform programming child's play


 
ça semble en effet ce qu'il faudrait :d enfin si minGW sait le compiler :d
 
 
 
sinon, pour ma culture, comment le fichier C source peut il etre compiler par minGW alors qu'aucun fichier d'entente est donné ? (dans minGW c'est GCCwin32 que j'ai utilisé)


---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 12:23:23    

J'ai pas compris ta question...
 
Pence à regarder ça aussi: http://www.bloodshed.net/devcpp.html

Reply

Marsh Posté le 06-11-2004 à 12:25:55    

Lam's a écrit :

J'ai pas compris ta question...
 
Pence à regarder ça aussi: http://www.bloodshed.net/devcpp.html

ce que je veux dire, c'est que dans le code *.c j'ai aucun fichier d'entete, pourtant le code fait appel a plusieurs fonctions qui ne sont pas explicitées dans le code meme, donc normallement faudrait mettre les headers où ces fonctions sont explicitées :
 
- dans le borland C++ builder, il me sortait l'erreur comme quoi justement ces fonctions etaient non définies
- avec GCC de minGW aucune erreur il a trouvé les fonctions tout seul.
 
pourquoi ?


---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 12:35:33    

Parce que ce sont des fonctions standards qui renvoient des int.  
 
Par défaut, en K&R, tout fonction non déclarée est considérée comme retournant un int. De nos jours, ce n'est plus le cas.
 
Il faudrait pas grand chose pour que ton code soit correct:
- déclarer toutes les fonctions que tu utilises en incluant stdio.h, stdlib.h etc.
- changer les en-têtes de tes fonctions pour que ça donne:
  int fonction(Type1 arg1, Type2, arg2)
au lieu de:
  fonction(arg1, arg2)
  Type1 arg1; Type2 arg2;

Reply

Marsh Posté le 06-11-2004 à 12:45:17    

merci pour l'explication :)


---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 13:07:37    

toujours dans le meme exercice, j'aurais besoin de la fonction "time" de linux (donnant la durée d'un process)... j'essaie de compiler ce source avec minGW mais c'est pas si simple cette fois :/


---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 13:52:25    

Lam's a écrit :

Tu vas voir www.wxwidgets.org pour continuer à utiliser MinGW. En plus ton code sera portable vers Linux.

t'aurais pas des conseils sur son utilisation ? les tutos se courent pas apres :/


---------------
http://www.zytratech.com
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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