Comment faire de la programmation C++ depuis fedora ??
Bonjour à tous,
Je suis passé il y a un an à Fedora (Linux) pour remplacer Windows. J'avais déjà un peu d'expérience avec Linux mais jusqu'à récemment, j'avais gardé Windows pour VS code (solution de facilité j'en conviens).
Aujourd'hui, j'aimerais pouvoir me débarasser de mon dualboot pour passer complètement sur Linux. J'ai donc installé g++ et VS code sous Fedora en me basant sur les tutoriels des sites officiels de ces logiciels et des forums d'entraide de fedora.
J'ai créé un dossier qui sera mon premier projet, mais dès le fameux Hello World je rencontre un problème : je n'arrive pas a compiler ! À noter que j'apprends la programmation
Pour le moment voila mon fichier main.cpp :
#include <iostream>
int main(){
std::cout << "Hello World" << std::endl;
return 0;
}
Dans mon terminal, je me rends dans le dossier où se trouve main.cpp à l'aide de la commande cd, puis j'entre la commande donné dans les forum que j'ai lue :
g++ main.cpp -o main
Mais là, ça ne fonctionne pas ; j'obtiens le message :
dans la fonction « _start » : (.text+0x1b) : référence indéfinie vers « main » collect2: erreur: ld a retourné le statut de sortie 1
Je ne sais absolument pas à quoi cela fait allusion, surtout que pour l'instant je suis le cours le plus basique ^^' Et je ne trouve personne sur internet qui a un tel problème ! Généralement, il y a une erreur dans leur code et en la corrigeant le problème disparaît, mais là, pour moi, je ne vois pas ! Le même code fonctionne sous windows. Est-ce qu'il me manque un logiciel ? Bref qu'est-ce que j'ai raté ?
- Meme fedora
- Application de programmation - Guide
- Télécharger le programme de pmu - Télécharger - Médias et Actualité
- Langage de programmation visual basic - Télécharger - Langages
- Fermer un programme de force - Guide
- Programmation sms - Guide
2 réponses
Bonjour,
Dans le code reporté dans #2, il faut écrire :
#include <iostream>
... et non :
#include "iostream"
En effet, la première syntaxe cherche le header iostream dans les dossiers propre à l'installation de g++, tandis que la seconde cherche dans les dossiers éventuellement précisés en option (e.g., g++ -I/home/toto/ pour chercher des fichier dans /home/toto). Dit plus simplement, on inclue les headers "standards" avec #include <...> et les headers qu'on a écrit soi-même avec #include "...".
Peux-tu dans un terminal aller dans le dossier du projet2, disons ~/projet2, et lancer les commandes suivantes :
cd ~/projet2 ls -l cat Main.cpp g++ Main.cpp -o mon_executable
Reporte le résultat des deux dernières commandes.
Tu peux utiliser n'importe quel éditeur texte, ça n'a aucune importance. Kate, gedit, ou même vscode. Si la compilation marche pour un projet mais pas pour d'autre, tout laisse penser que tu n'appelles pas le compilateur correctement, ce qui implique de l'appeler "depuis le bon dossier" et "en passant en paramètre un nom de fichier valide).
Bonne chance
Bonsoir,
Merci pour ta réponse. Eh bien, oui, je suis sur de mon nom de fichier. J'ai fini par tout désinstaller et réinstaller, sans supprimer le dossier contenant mon main.cpp et maintenant tout fonctionne (pour ce dossier uniquement).
J'ai donc le même résultat que sur ta capture d'écran pour mon premierer dossier que l'on va appeler "projet1".
Cependant j'ai créé un dossier "projet2", et là, de nouveau la même erreur de référence avec main quand j'entre la commande :
g++ Main.cpp -o myProgram
En voici le résultat exact :
/usr/bin/ld : /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o : dans la fonction « _start » : (.text+0x1b) : référence indéfinie vers « main » collect2: erreur: ld a retourné le statut de sortie 1
Encore une fois je suis sûre à 100% de mon nom de fichier Main.cpp, je l'ai toujours écrit comme cela, le M en majuscule ain.cpp tout attaché (déjà sur windows je l'écrivais de la sorte) pour tous mes programmes. C'est le nom que je donne aux fichiers cpp qui contiennent la fonction main() dans TOUS mes projets, comme ça c'est clair, pas d'erreur possible d'un programme à l'autre.
Dans mon projet2 le code est le suivant:
#include "iostream"
int main(){
std::cout << "hello world" << std::endl;
return 0;
}
En gros le même probleme de base qu'avec mon projet1.
Je me vois mal désinstaller tout mon attirail de code à chaque nouveau programme, et j'aimerais bien comprendre mon erreur. Y a t'il une manipulation que j'oublie, ou que je fais mal lorsque je crée un dossier qui servira de projet pour un programme ?
PS: J'ai laissé tomber vs code pour Kate, car sur Internet je trouve beaucoup plus de monde utilisant Kate que vscode sur fedora et Linux en général.
J'ai également ouvert mon terminal dans le bon dossier si jamais ^^
Quand je me place dans le dossier "projet1" et que je tape la commande il crée correctement le fichier executable et je n'ai plus qu'a taper ./"nom du fichier" pour executer mon programme et tout va bien, et si erreur dans mon code il y a alors mon terminal m'indique ou est-ce qu'il attendait une syntaxe differente .
Je me place donc avec la commande cd dans le dossier "projet2" je tape ma commande et là erreur comme cité plus haut ou on me renvoie le code 1.


Salut @mamiemando StatutModérateur,
Bien vu, je ne pense pas que l'erreur vienne de là, le compilateur va effectivement rechercher le fichier dans le dossier courant, s'il n'est pas trouvé alors il va le chercher dans les dossiers système, mais d'accord avec toi ce n'est pas la bonne pratique...
Tu as raison, il y a un double problème (l'inclusion qui est mal faite, et la compilation qui est mal instanciée), et c'est d'ailleurs en ce sens que mon message #4 est tourné (j'aimerais bien voir le contenu du dossier).