Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'exécution avec gcc sous Mac OS Catalina

clang: error: no input files

    10 juin 2022 à 12:42:11

    Bonjour, 

    Je réaborde le sujet n'étant pas résolu! Nous sommes sous OS Catalina. 

    Je n'arrive pas à exécuter un fichier sous vim (il compile) mais ne veut pas s'executer avec la commande : gcc -o main.c 

    L'erreur s'affiche : clang: error: no input files

    Des idées ?

    Bisous

    • Partager sur Facebook
    • Partager sur Twitter
      10 juin 2022 à 13:12:05

      Bonjour, lire la doc ?

      L'option -o sert à donner le nom du fichier produit ; facile à retenir ⇒ o comme output. Donc soit tu ne spécifies pas l'option -o et le fichier produit se nommera a.out ; soit tu utilises l'option -o pour donner un nom ⇒ gcc -o mon_executable main.c et ton exécutable se nommera mon_executable.

      Mais le gros point à retenir ici est qu'avant de venir poser une question sur un forum il faut impérativement chercher un peu par soi-même et surtout, surtout, surtout, LIRE LA DOC.

      • Partager sur Facebook
      • Partager sur Twitter
        10 juin 2022 à 15:16:29

        Et sous macOS c'est LLVM qui est utilisé, gcc est juste un alias. Pense à changer ton habitude.
        • Partager sur Facebook
        • Partager sur Twitter

        git is great because Linus did it, mercurial is better because he didn't.

          10 juin 2022 à 16:05:27

          Bon, on melange tout

          • Vim est un éditeur de textes, qui sert principalement à modifier le texte du fichier source main.c
          • Gcc est un compilateur qui permet (simplifions) de traduire un fichier source en fichier exécutable
          • Faire exécuter l'exécutable, c'est une autre histoire.
          • Partager sur Facebook
          • Partager sur Twitter
            10 juin 2022 à 16:26:18

            markand a écrit:

            Et sous macOS c'est LLVM qui est utilisé, gcc est juste un alias. Pense à changer ton habitude.

             Humm, sous macOS en C on ne peut pas exécuter un fichier dans la console ? 

            White Crow a écrit:

            Bonjour, lire la doc ?

            L'option -o sert à donner le nom du fichier produit ; facile à retenir ⇒ o comme output. Donc soit tu ne spécifies pas l'option -o et le fichier produit se nommera a.out ; soit tu utilises l'option -o pour donner un nom ⇒ gcc -o mon_executable main.c et ton exécutable se nommera mon_executable.

            Mais le gros point à retenir ici est qu'avant de venir poser une question sur un forum il faut impérativement chercher un peu par soi-même et surtout, surtout, surtout, LIRE LA DOC.

            Merci du conseil, ce screen est-il suffisant pour demander un petit coup de main ?





            -
            Edité par Pierre-AntoineDumond2 10 juin 2022 à 16:30:51

            • Partager sur Facebook
            • Partager sur Twitter
              10 juin 2022 à 16:59:07

              clang main.c -o main
              • Partager sur Facebook
              • Partager sur Twitter

              git is great because Linus did it, mercurial is better because he didn't.

                10 juin 2022 à 21:06:35

                Clairement tu fais un peu n'importe quoi en imaginant qu'au bout d'un moment ça marchera par hasard. Reprenons dans l'ordre

                $ vim main.c

                Ok, ça, ça démarre l'éditeur de textes vim pour taper/modifier/corriger le fichier source

                gcc -o main.o -c main.c
                

                Ca demande de fabriquer main.o (-o comme output) à partir de la compilation séparée (option -c) du source main.c.

                C'est pas faux, mais comme tu mets l'option -c, ça fabrique seulement un "fichier objet" qui n'est pas exécutable. Un exécutable c'est produit (par le le linker) à partir de fichiers objets, et de bibliothèques d''exécution (dont la bibliothèque standard C qui correspond à stdio.h et compagnie.)

                Là où ça ne va plus du tout

                $ ./main.c            # NON

                non, là tu dis à l'interpréteur de commandes (le shell zsh qui tourne dans ta console) que tu veux faire exécuter le fichier main.c qui est dans le répertoire courant. Le fichier main.c n'est pas exécutable. Pour cela il faudrait que le bit x soit à 1 dans ses permissions (c'est pour ça que tu as le message "permission denied"), et que le chargeur (loader) le reconnaisse (ça devient technique), soit parce qu'il a un magic number qui va bien, soit parce qu'il reconnait que c'est un script.

                Tu aurais fait ./main.o, ça ne marcherait pas non plus.  Main.o est un fichier objet, et un fichier objet n'est pas exécutable.

                A partir de là, tu as deux solutions.

                1. soit tu persistes dans l'idée de commencer par une compilation séparée. Alors il faut continuer en faisant une édition des liens pour fabriquer l'exécutable, et le faire exécuter sans doute. Ce qui donne la séquence de commandes

                vim main.c                # edition de textes
                gcc -o main.o -c main.c   # compilation séparée
                gcc -o main main.o        # production de l'exécutable
                ./main                    # exécution de l'exécutable
                
                

                2. soit tu produis directement l'exécutable (sans option -c)

                vim main.c                # edition de textes
                gcc -o main   main.c      # compilation et production de l'exécutable
                ./main                    # exécution de l'exécutable
                


                ce qui est quand même plus simple.

                PS: le problème des pages de manuel, c'est que ce sont des documents de référence sur les options des commandes, mais que ce ne sont absolument pas des tutoriels commençant par expliquer simplement les notions de base, avec des exemples bien expliqués, et donc c'est assez peu utilisable par des débutants. Autrefois on en trouvait dans les docs système unix, à côté des pages de manuel.

                -
                Edité par michelbillaud 10 juin 2022 à 21:14:56

                • Partager sur Facebook
                • Partager sur Twitter
                  10 juin 2022 à 21:18:36

                  Pierre-AntoineDumond2 a écrit:

                  [...]

                  White Crow a écrit:

                  Bonjour, lire la doc ?

                  L'option -o sert à donner le nom du fichier produit ; facile à retenir ⇒ o comme output. Donc soit tu ne spécifies pas l'option -o et le fichier produit se nommera a.out ; soit tu utilises l'option -o pour donner un nom ⇒ gcc -o mon_executable main.c et ton exécutable se nommera mon_executable.

                  Mais le gros point à retenir ici est qu'avant de venir poser une question sur un forum il faut impérativement chercher un peu par soi-même et surtout, surtout, surtout, LIRE LA DOC.

                  Merci du conseil, ce screen est-il suffisant pour demander un petit coup de main ?

                  [...]

                  -
                  Edité par Pierre-AntoineDumond2 il y a environ 4 heures


                  en plus de lire la doc, lire les réponses aide aussi :

                  White Crow a écrit:

                  [...]

                  L'option -o sert à donner le nom du fichier produit ; facile à retenir ⇒ o comme output. Donc soit tu ne spécifies pas l'option -o et le fichier produit se nommera a.out ; soit tu utilises l'option -o pour donner un nom ⇒ gcc -o mon_executable main.c et ton exécutable se nommera mon_executable.

                  [...]

                  f

                  google est ton ami, je ne te fais pas de lmgtfy … https://fr.wikihow.com/compiler-un-programme-en-C-avec-le-compilateur-GNU-GCC#:~:text=Compilez%20votre%20programme%20source.&text=gcc%20%5Bnom_du_code_source%5D.,donner%20%C3%A0%20votre%20application%20compil%C3%A9e.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juin 2022 à 9:11:18

                    Merci la doc, et c'est clang sous mac. gcc est un alias mais par habitude utiliser clang pour ne pas se fier à des options spécifiques à gcc.

                    -
                    Edité par markand 12 juin 2022 à 9:12:11

                    • Partager sur Facebook
                    • Partager sur Twitter

                    git is great because Linus did it, mercurial is better because he didn't.

                    Problème d'exécution avec gcc sous Mac OS Catalina

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown