[réglé] probleme d'execution de programme C..

probleme d'execution de programme C.. [réglé] - C - Programmation

Marsh Posté le 01-03-2007 à 19:51:33    

bonjour
j'ai un pti probleme qui me rend fou ce soir... je programme en C sur les PC de mon IUT et tout fonctionne nickel, compilation et execution sur un terminal de linux
j'ai transferer les programmes sur mon propre PC chez moi, j'utilise un terminal de Mandriva, ca compile bien mais par contre pas moyen d'executer...
voici les commandes que j'ai tapé :
gcc -c main.c -o /home/mic/bin/main.exe
chmod +x /home/mic/bin/main.exe(jusque là ca marche)
main.exe
main.exe : Erreur de format pour exec(). Binary file not executable.
 
voilà :/ donc si quelqu'un pouvait m'aider rapidement.. je sais pas si c'est utile de preciser, j'utilise un terminal csh


Message édité par mic-chan le 03-03-2007 à 13:38:38
Reply

Marsh Posté le 01-03-2007 à 19:51:33   

Reply

Marsh Posté le 01-03-2007 à 20:15:13    

main tout court et non main.exe. Et le chmod +x est inutile.


---------------
You get so used to things the way they are. And I've always been alone. I guess that makes me lonely.
Reply

Marsh Posté le 01-03-2007 à 20:20:09    

euh, le -c il devrait pas être là.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 01-03-2007 à 20:23:42    

malheureusement j'ai essayé aussi...  
/home/mic/bin/main: Erreur de format exec(). Binary file not executable
ca fait pareil avec main.o et main.out...

Reply

Marsh Posté le 01-03-2007 à 20:26:49    

Fais voir le code. Et compile-le au minimum avec -Wall.


---------------
You get so used to things the way they are. And I've always been alone. I guess that makes me lonely.
Reply

Marsh Posté le 01-03-2007 à 20:36:42    

voici le code des programmes concernés, ils compilent et (d'habitude) s'executent correctement
 
main

Code :
  1. #include "tab_personne.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main() {
  5.   Personne tab_pers[MAX_PERS];
  6.   char nom[LONG_CHAINE];
  7.   Personne p;
  8.   int taille;
  9.   int choix,place;
  10.   printf("Quel est le nombre de personne (Max=%d) :",MAX_PERS);
  11.   scanf("%d",&taille);
  12.  
  13.   Saisir(tab_pers,taille);
  14.   Trier(tab_pers,taille);
  15.   Afficher(tab_pers,taille);
  16.   choix=-1;
  17.   while (choix != 0) {
  18.     printf(".: Menu :. \n" );
  19.     printf(" (0) Quitter \n (1) Recherche \n (2) Insertion \n (3) Suppression \n (4) Affichage \n" );
  20.     scanf("%d",&choix);
  21.     switch (choix) {
  22.     case 1 : {
  23.       printf("Qui recherchez-vous ?" );
  24.       scanf("%s",nom);
  25.       strcpy(p.cnom,nom);
  26.       place=RechercherDicho(tab_pers,taille,p);
  27.       if (place!=-1) {
  28. printf("%s a %d ans \n",tab_pers[place].cnom,tab_pers[place].cage);
  29.       }else{
  30. printf("%s n'est pas dans le tableau\n",nom);
  31.       }
  32.       break;
  33.     }
  34.     case 2 : {
  35.       printf("Nom : " );
  36.       scanf("%s", p.cnom);
  37.       printf("Age : " );
  38.       scanf("%d", &p.cage);
  39.       taille = Inserer(tab_pers,taille,p);
  40.       break;
  41.     }
  42.     case 3 : {
  43.       printf("Nom : " );
  44.       scanf("%s", p.cnom);
  45.       taille = Supprimer(tab_pers,taille,p);
  46.       break;
  47.     }
  48.     case 4 : {
  49.       Afficher(tab_pers, taille);
  50.     }
  51.     }
  52.   }
  53. }


 
tab_personne.h

Code :
  1. #ifndef _Personne
  2. #define _Personne
  3. #define MAX_PERS 30
  4. #define LONG_CHAINE 20
  5. typedef struct {
  6.   char cnom[LONG_CHAINE];
  7.   int cage;
  8. } Personne;
  9. void Saisir(Personne t[],int n);
  10. void Afficher(Personne t[],int n);
  11. void Trier(Personne t[],int n);
  12. int Inserer(Personne t[],int n,Personne p);
  13. int RechercherDicho(Personne t[],int n,Personne p);
  14. int Supprimer(Personne t[],int n,Personne p);
  15. #endif


 
tab_personne.c

Code :
  1. #include "tab_personne.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. void Saisir(Personne t[],int n) {
  5.   int i;
  6.   for (i=0;i<n;i++) {
  7.     printf("Saisir le nom de l'individu : " );
  8.     scanf("%s",t[i].cnom);
  9.     printf("Entrer son age : " );
  10.     scanf("%d",&t[i].cage);
  11.   }
  12. }
  13. void Afficher(Personne t[],int n){
  14.   int i;
  15.   for(i=0;i<n;i++){
  16.     printf("Personne %d :\n",i+1);
  17.     printf("Nom : %s\n",t[i].cnom);
  18.     printf("Age : %d\n",t[i].cage);
  19.   }
  20. }
  21. void Trier(Personne t[],int n) {
  22.   int i,j,fin;
  23.   fin=1;
  24.   i=n-1;
  25.   Personne temp;
  26.   while ((fin == 1)&&(i>0)) {
  27.     fin=0;
  28.     for (j=0;j<i;j++) {
  29.       if (strcmp(t[j].cnom,t[j+1].cnom)>0) {
  30. strcpy(temp.cnom,t[j].cnom);
  31. temp.cage=t[j].cage;
  32. strcpy(t[j].cnom,t[j+1].cnom);
  33. t[j].cage=t[j+1].cage;
  34. strcpy(t[j+1].cnom,temp.cnom);
  35. t[j+1].cage=temp.cage;
  36. fin=1;
  37.       }
  38.     }
  39.     i--;
  40.   }
  41. }
  42. int Inserer(Personne t[],int n,Personne p) {
  43.   int i=n-1;
  44.   while (strcmp(p.cnom,t[i].cnom)<0) {
  45.     t[i+1]=t[i];
  46.     i--;
  47.   }
  48.   strcpy(t[i+1].cnom,p.cnom);
  49.   t[i+1].cage=p.cage;
  50.   return n+1;
  51. }
  52. int RechercherDicho(Personne t[],int n,Personne p) {
  53.   int binf=0;
  54.   int bsup=n-1;
  55.   int trouve=1;
  56.   int place;
  57.   int res=-1;
  58.   while ((trouve == 1)&&(binf <= bsup)) {
  59.     place=(binf+bsup)/2;
  60.     if (strcmp(t[place].cnom,p.cnom)==0){
  61.       trouve=0;
  62.       res=place;
  63.     }else{
  64.       if (strcmp(t[place].cnom,p.cnom)>0){
  65. bsup=place-1;
  66.       }else{
  67. binf=place+1;
  68.       }
  69.     }
  70.   }
  71.   return res;
  72. }
  73. int Supprimer(Personne t[],int n,Personne p) {
  74.   int place=RechercherDicho(t,n,p);
  75.   int i;
  76.   for (i=place;i<n-1;i++) {
  77.     t[i]=t[i+1];
  78.   }
  79.   strcpy(t[n-1].cnom, "" );
  80.   t[n-1].cage = 0;
  81.   return n-1;
  82. }


 
j'ai aussi un makefile

Code :
  1. OBJS = tab_personne.o main.o
  2. CC = gcc
  3. CFLAGS = -Wall -g
  4. all : $(OBJS)
  5. $(CC) $(OBJS) -o executable
  6. tab_personne.o : tab_personne.c tab_personne.h
  7. $(CC) $(CFLAGS) -c tab_personne.c -o tab_personne.o
  8. main.o : main.c
  9. $(CC) $(CFLAGS) -c main.c -o main.o
  10. clean :
  11. rm -f executable core *.o
  12. extremiste :
  13. rm -f *~


 
la commande make me créé le fichier nommé executable et quand j'ecrit executable dans le terminal j'ai un command not found


Message édité par mic-chan le 01-03-2007 à 21:18:54
Reply

Marsh Posté le 01-03-2007 à 21:02:01    

le -Wall m'affiche un warning :
main.c: in function 'main' :
main.c:56: warning: control reaches a non-void function
 
je suis quasiment sûr que j'avais deja ce message lorsque j'ai compilé sur le PC sur lequel j'ai programmé et que ca n'avait pas géné l'execution
 
sur mon PC, le fichier executable se crée bien aussi, donc je comprend vraiment pas cette erreur command not found... :/

Message cité 1 fois
Message édité par mic-chan le 01-03-2007 à 21:05:35
Reply

Marsh Posté le 01-03-2007 à 21:29:51    

mic-chan a écrit :

le -Wall m'affiche un warning :
main.c: in function 'main' :
main.c:56: warning: control reaches a non-void function

 

je suis quasiment sûr que j'avais deja ce message lorsque j'ai compilé sur le PC sur lequel j'ai programmé et que ca n'avait pas géné l'execution

 

sur mon PC, le fichier executable se crée bien aussi, donc je comprend vraiment pas cette erreur command not found... :/

 

Pour l'exécuter, ./ devant l'exécutable. Ton main n'a pas de paramètre (là en l'occurence : void) et il doit retourner un int (return 0; par exemple).
Les scanf() c'est dangereux. :o


Message édité par -Opera- le 01-03-2007 à 21:30:25

---------------
You get so used to things the way they are. And I've always been alone. I guess that makes me lonely.
Reply

Marsh Posté le 01-03-2007 à 21:35:38    

merci il fallait bien mettre ./executable ^_^ j'avais l'habitude de ne pas mettre ./et jusqu'a present ca marchait donc je ne m'etais jamais posé de question la dessus  :sweat:  
 
encore merci ^^
 

Reply

Marsh Posté le 01-03-2007 à 21:37:21    

C'est surement parce que jusqu'à présent, "." était dans $PATH :o

Reply

Sujets relatifs:

Leave a Replay

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