Gcc et execution

Bonjour,
pour compiler un programme c sous linux
on ecrit
gcc -o saf.c saf
et pour l'executer on ecrit
./saf
mais il la considere comme etant un repertoire ou fichier(./)
et ne peut pas l'executer.
s'il vous plais que dois-je faire.
merci
Configuration: Windows XP
Firefox 3.0.3

5 réponses

  1. pour compiler :
    gcc saf.c
    pour executer:
    ./a.out
    j'espere que ca marche
    1. salut,

      mais il la considere comme etant un repertoire ou fichier(./)

      peut-être faut-il aussi rendre le script exécutable ...
      1. Modérateur
        Salut,

        Normalement le fichier est exécutable dès sa création par gcc.
        lami20j@debian:~/trash$ ls code_retour
        ls: code_retour: Aucun fichier ou répertoire de ce type
        lami20j@debian:~/trash$ gcc -o code_retour code_retour.c
        lami20j@debian:~/trash$ ls -l code_retour
        -rwxr-xr-x 1 lami20j lami20j 7376 2008-11-02 10:22 code_retour


      2. Modérateur
        Re,

        Comme l'a bien dit dubcek il y a une erreur au niveau de la commande gcc
        Erreur qui n'est pas montrée par starghof

        Voilà ce qui ce passe si on exécute gcc -o fichier.c fichier
        lami20j@debian:~/programmation_systeme_en_c_sous_linux$ gcc -o fork.c fork
        gcc: fork: Aucun fichier ou répertoire de ce type
        gcc: no input files

    2. Bonjour,

      pour compiler un programme c sous linux
      on ecrit
      gcc -o saf.c saf


      euh..., essayer plutôt

      gcc -o saf saf.c

      Manu
      1. mais c très simple
        tu fais: gcc -o saf.o -c saf.c (compilation)
        gcc -o saf.c saf.exe
        ./saf.exe (execution)

        ou soit:
        gcc saf.c
        ./a.out

        C'est s simple que ça
        1. Modérateur
          Salut,

          au moins tu as testé ce que tu avances?
          mais c très simple
          tu fais: gcc -o saf.o -c saf.c (compilation)
          gcc -o saf.c saf.exe
          ./saf.exe (execution)


          Voici ce qu'on obtiens d'après tes conesils
          lami20j@debian:~/ssh_shared/programmation_systeme_en_c_sous_linux$ gcc -o fork.o fork.c
          lami20j@debian:~/ssh_shared/programmation_systeme_en_c_sous_linux$ gcc -o fork.c fork.exe
          fork.exe:(.rodata+0x0): définitions multiples de « _fp_hw »
          /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o:(.rodata+0x0): défini pour la première fois ici
          fork.exe: dans la fonction « __data_start »:
          (.data+0x4): définitions multiples de « __dso_handle »
          /usr/lib/gcc/i486-linux-gnu/4.1.2/crtbegin.o:(.data+0x0): défini pour la première fois ici
          fork.exe: dans la fonction « _init »:
          /build/buildd/glibc-2.3.6.ds1/build-tree/i386-libc/csu/crti.S:36: définitions multiples de « _init »
          /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crti.o:/build/buildd/glibc-2.3.6.ds1/build-tree/i386-libc/csu/crti.S:36: défini pour la première fois ici
          fork.exe: dans la fonction « _start »:
          ../sysdeps/i386/elf/start.S:65: définitions multiples de « _start »
          /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o:../sysdeps/i386/elf/start.S:65: défini pour la première fois ici
          fork.exe: dans la fonction « _fini »:
          /build/buildd/glibc-2.3.6.ds1/build-tree/i386-libc/csu/crti.S:52: définitions multiples de « _fini »
          /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crti.o:/build/buildd/glibc-2.3.6.ds1/build-tree/i386-libc/csu/crti.S:52: défini pour la première fois ici
          fork.exe:(.rodata+0x4): définitions multiples de « _IO_stdin_used »
          /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o:(.rodata+0x4): défini pour la première fois ici
          fork.exe: dans la fonction « __data_start »:
          (.data+0x0): définitions multiples de « __data_start »
          /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o:(.data+0x0): défini pour la première fois ici
          collect2: ld returned 1 exit status
          lami20j@debian:~/ssh_shared/programmation_systeme_en_c_sous_linux$
          

          En fait ta 1ère commande crée l'exécutable saf.o au lieu d'un fichier objet (malgré l'extension) la deuxième étant inutile et incorrecte.

          Si tu veux créer un fichier objet .o alors tu dois faire comme ça
          gcc -c fork.c
          gcc -o fork.exe fork.o
          mais on peu le faire directe sans créer le fichier objet comme l'a dit dubcek dans son message