[Débutant] problème pendant la compilation d'un programme

Fermé
Noomolas01 - Modifié le 16 juin 2023 à 14:36
mamiemando Messages postés 33145 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 10 juin 2024 - 16 juin 2023 à 14:56

Bonsoir, ou bonjour, selon quand vous lisez mon message.

Avant toute chose, je suis un véritable débutant. Je n'ai jamais touché à du code de ma vie hormis pendant les cours d'informatique du collège, en utilisant scratch. Je préfère le notifier avant d'expliquer mon problème. Ah, et merci d'avance si vous prenez le temps de m'aider, c'est très sympathique de votre part.

Je vais essayer d'expliquer dans le détail mon problème :

Pour apprendre le C++ j'ai suivi ce tutoriel. J'ai donc installé visual studio code (version 1.78.2) ainsi que GCC (version 13.1.0) en Win64 sans LLVM/Clang/LLD/LLDB. J'ai fait toute les manipulations indiquées dans la vidéo ainsi que des vidéos dont il était fait référence, c'est-à-dire :

  1. J'ai déplacé le dossier mingw64 de manière à ce qu'on y accède ainsi :          C:\Program Files\mingw64 
  2. J'ai ouvert "modifier les variables d'environnement système" puis j'ai cliquer sur "Variable d'environnement" puis sur path, j'ai rajouté ceci avant de fermer le tout : C:\Program Files\mingw64 
  3. J'ai ouvert la console pour écrire cette commande : 
    C:\Users\utilisateur>gcc -v

    ce qui m'a donné pour résultat :

    Using built-in specs.
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=C:/Program\ Files/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/lto-wrapper.exe
    OFFLOAD_TARGET_NAMES=nvptx-none
    Target: x86_64-w64-mingw32
    Configured with: ../configure --prefix=/R/winlibs64ucrt_stage/inst_gcc-13.1.0/share/gcc --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --enable-offload-targets=nvptx-none --with-pkgversion='MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders' --with-tune=generic --enable-checking=release --enable-threads=posix --disable-sjlj-exceptions --disable-libunwind-exceptions --disable-serial-configure --disable-bootstrap --enable-host-shared --enable-plugin --disable-default-ssp --disable-rpath --disable-libstdcxx-debug --disable-version-specific-runtime-libs --with-stabs --disable-symvers --enable-languages=c,c++,fortran,lto,objc,obj-c++ --disable-gold --disable-nls --disable-stage1-checking --disable-win32-registry --disable-multilib --enable-ld --enable-libquadmath --enable-libada --enable-libssp --enable-libstdcxx --enable-lto --enable-fully-dynamic-string --enable-libgomp --enable-graphite --enable-mingw-wildcard --enable-libstdcxx-time --enable-libstdcxx-pch --with-mpc=/d/Prog/winlibs64ucrt_stage/custombuilt --with-mpfr=/d/Prog/winlibs64ucrt_stage/custombuilt --with-gmp=/d/Prog/winlibs64ucrt_stage/custombuilt --with-isl=/d/Prog/winlibs64ucrt_stage/custombuilt --disable-libstdcxx-backtrace --enable-install-libiberty --enable-__cxa_atexit --without-included-gettext --with-diagnostics-color=auto --enable-clocale=generic --with-libiconv --with-system-zlib --with-build-sysroot=/R/winlibs64ucrt_stage/gcc-13.1.0/build_mingw/mingw-w64 CFLAGS='-I/d/Prog/winlibs64ucrt_stage/custombuilt/include/libdl-win32 -Wno-int-conversion  -march=nocona -msahf -mtune=generic -O2' CXXFLAGS='-Wno-int-conversion  -march=nocona -msahf -mtune=generic -O2' LDFLAGS='-pthread -Wl,--no-insert-timestamp -Wl,--dynamicbase -Wl,--high-entropy-va -Wl,--nxcompat -Wl,--tsaware'
    Thread model: posix
    Supported LTO compression algorithms: zlib zstd
    gcc version 13.1.0 (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders)

Ensuite, j'ai suivi cette vidéo qui explique comment coder son premier programme.

Voilà exactement ce que j'ai fait :

  1. J'ai créé un dossier que j'ai nommé C++ que j'ai placé dans C:\
  2.  A l'intérieur de ce même dossier, j'ai créé un fichier que j'ai nommé "main" avec l'extension ".cpp" (j'ai au préalable activer l'affichage des extensions).
  3. Je l'ai ouvert avec Visual Studio Code.
  4. Je l'ai édité pour que ça donne ceci : 
    #include <iostream>
    
    int main()
    {
        std::cout << "Salam" << std::endl;  
    
        return 0;
    }
  5. J'ai enregistré et fermé le fichier "main.cpp".
  6. J'ai ouvert l'invite de commande pour y écrire ceci :
    C:\Users\utilisateur> cd C:\C++

    ce qui m'a ensuite donné :

    C:\C++>
    

    Et où j'y ai écrit la commande : 

    C:\C++> g++ -std=c++17 -Wall -Wextra -Werror main.cpp -o prog

Et voilà le message que cela m'indique : 

'-std' n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.


Windows / Opera 98.0.0.0

A voir également:

5 réponses

Tout cela se passe comme si tu n'avais pas tapé le  g++
avant le -std=
C'est un message de cmd, pas de g++
Essaies de taper  dir /b  au niveau de ton dossier C:\C++ pour voir si ton fichier main.cpp est bien là.

Puisque tu es là, tu peux essayer de taper  where g++

pour voir si le compilateur est bien accessible à cet endroit.

Je ne te conseille pas de suivre un tutoriel sur YouTube, sauf si tu aimes vraiment faire des pause et reculer souvent ...
Voici un trèes bon tutoriel gratuit en ligne.
https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/
Personnellement, je n'utilise pas Visual Studio Code ni aucun autre IDE (Integrated Development Environment)
Je travaille directement avec cmd et l'éditeur  notepad.
Tu pourrais aussi installer notepad++ qui offre la coloration syntaxique.

1
PierrotLeFou
8 juin 2023 à 18:53

D'abord, c'est surprenant que g++ se trouve dans ton dossier C:\C++. C'est suffisant qu'il soit dans Program Files (le where le confirme)
Le where est une commande qui cherche dans les dossiers du %path% si le programme mentionné existe.
Le dir /b liste les fichier et/ou les sous-dossiers se trouvant dans le dossier courant.
Tu as un fichier prog.exe dans ce dossier. Tu pourrais taper simplement  prog  et le programme devrait s'exécuter.
Cette extension (.exe) n'a pas besoin d'être mentionnée.

1

Je vois...

Merci beaucoup PierrotLeFou pour votre aide et vos conseils !!

0

Merci beaucoup de m'avoir lu, j'espère que vous pourrez m'aider :)

0

Bonjour, merci pour votre réponse PierrotLeFou !

Essaies de taper  dir /b  au niveau de ton dossier C:\C++ pour voir si ton fichier main.cpp est bien là.

voilà ce que ça me donne : 

C:\C++> dir /b
g++
main.cpp
prog.exe

Puisque tu es là, tu peux essayer de taper  where g++

voilà ce que ça me donne :

C:\C++> where g++
C:\C++\g++
C:\Program Files\mingw64\bin\g++.exe

Je ne te conseille pas de suivre un tutoriel sur YouTube, sauf si tu aimes vraiment faire des pause et reculer souvent ...
Voici un trèes bon tutoriel gratuit en ligne.
https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/

D'accord, je prends note du conseil ! Et merci pour le lien du tutoriel !

Personnellement, je n'utilise pas Visual Studio Code ni aucun autre IDE (Integrated Development Environment)
Je travaille directement avec cmd et l'éditeur  notepad.
Tu pourrais aussi installer notepad++ qui offre la coloration syntaxique.

Je vois que ce n'est une nécessité mais toutes les vidéos/tutos que j'ai vu/lu préconisent d'en installer un, pour l'instant je vais faire avec. J'ai déjà essayer Notepad++ mais son interface ne me plaît pas trop. 

0

Je ne comprends pas trop comment, mais maintenant cela fonctionne, est-ce grâce aux commandes que vous m'avez indiqué ? Si oui, pouvez m'expliquer leurs fonctions ?

Merci d'avance ^^

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33145 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 10 juin 2024 7 756
16 juin 2023 à 14:56

Bonjour Noomolas01,

Quel que soit ton système d'exploitation (Windows, Linux), une commande est :

  • soit une built-in (par exemple cd)
  • soit un programme (c'est le cas de gcc ou g++)

Quand tu tapes une commandes, ton shell (ton terminal) va chercher si on est dans l'un ou l'autre cas de figure. Quand il s'agit d'un programme,

  • soit on passe son chemin absolu (par exemple C:\Program Files\mingw64\bin\g++.exe)
  • soit plus simplement juste son nom (g++.exe qui sous windows peut s'abréger g++). 
    • ... mais dans ce cas, il faut que le dossier (ici C:\Program Files\mingw64\bin) qui héberge la commande (ici g++) soit référencé dans la variable d'environnement adéquate pour que ton shell puisse la trouvé : c'est le fameux PATH.
    • sous windows, le path est noté %PATH% (ou %path%), sous Linux $PATH.

Ensuite, que fait ton shell ? Quand tu tapes la commande g++ (suivie ou non de paramètres), ton shell regarde si c'est une built-in. Ce n'est pas le cas ici, donc il itère sur chaque dossier listé dans ton PATH. Pour afficher sa valeur :

  • sous windows : 
    echo %PATH%
  • sous Linux : 
    echo $PATH

Dès que ton shell trouve un dossier contenant une commande g++, il s'arrête : l'exécutable à lancer est déterminé, et donc il n'y a plus de raison de chercher dans les autres dossiers. Cela signifie que si l'exécutable g++ est dans plusieurs dossiers de ton PATH, c'est celui qui est dans le dossier le plus au début de ton PATH qui est utilisé. Si on voulait utiliser une autre occurrence, on serait donc contraint(e) d'utiliser son chemin absolu.

Si la commande n'est trouvée dans aucun dossier listé dans ton PATH, alors la résolution échoue et ton shell te dit que la commande est introuvable. C'est sur cette base que le message #2 de Pierrot a été écrit : si tu oublies de taper "g++" en début de commande, alors le premier est mot de ta commande est "-std" et c'est donc celui que ton shell va tenter de résoudre.

La commande where (dont tu parles dans le message #3, et dont l'équivalent est whereis sous Linux) cherche parmi les dossiers de ton PATH la commande recherchée. Si elle n'est pas capable de résoudre ta commande, c'est probablement que le programme n'est pas installé, du moins pas dans un dossier référencé dans ton PATH.

Pour finir, il est parfaitement possible de modifier sa variable d'environnement PATH. Sous Linux la question se pose rarement car tous les exécutables sont supposés être installés dans trois dossiers bien définis par la FHS. Sous windows, chaque application vit dans son propre dossier, et donc à chaque fois il faut s'assurer que le dossier dans lequel elle est effectivement installé est référencer dans ton PATH.

Je ne comprends pas trop comment, mais maintenant cela fonctionne, est-ce grâce aux commandes que vous m'avez indiqué ? Si oui, pouvez m'expliquer leurs fonctions ?

Les commandes where ou dir ne modifient pas ta configuration, elles permettent juste de diagnostiquer. Il est probable qu'entre le moment où tu as soulevé le problème et le moment où il s'est résolu, tu as relancé ton shell et du coup PATH était correctement initialisé.

Une autre explication possible est peut être le dossier courant dans lequel tu te trouves. Sous windows il me semble que le dossier courant est implicitement dans ton PATH. Donc si tu lances la commande g++ depuis le dossier qui la contient, alors elle peut être résolue par ton shell.

Bonne chance

0