C++ undefined reference to
Résolu/Fermémamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 5 août 2022 à 15:07
- Undefined reference to cpp
- Reference pto - Accueil - Box & Connexion Internet
- Qwerty to azerty - Guide
- Press esc in 1 seconds to skip startup.nsh any other key to continue ✓ - Forum Windows 10
- Welcome to nginx! ✓ - Forum Applis & Sites
- 1 to ✓ - Forum Windows
1 réponse
Modifié le 5 août 2022 à 15:08
Bonjour,
Merci quand tu soumets du code de le mettre en forme (voir ce lien).
Le code est correct, donc je pense que c'est la manière dont tu compiles ton projet qui pose problème. Quel environnement de développement utilises-tu ? Utilises-tu un Makefile (ou mieux, cmake) ?
Ce que je te propose, c'est d'installer et utiliser cmake (qui permet de générer un makefile à partir d'un fichier CMakeLists.txt), make (qui permet de lire un fichier Makefile en vue de compiler un projet) et g++ (pour compiler).
Installation
Si tu es sous Debian ou une distribution Linux qui en dérive, installe-les comme suit :
sudo apt update sudo apt install cmake make g++
Si tu es sous MacOS ou une autre distribution Linux, installe ces paquets via ton gestionnaire de paquets habituel.
Si tu es sous windows, je te laisse le soin de regarder un tutoriel sur l'utilisation de cmake sous Windows.
Utilisation
Organise ton projet comme suit :
./CMakeLists.txt
./src
./src/Arme.hpp
./src/Personnage.cpp
./src/Personnage.hpp
./src/Arme.cpp
./src/main.cpp
où le fichier CMakeLists.txt contient (voir ce lien pour plus de détails) :
cmake_minimum_required(VERSION 3.12) # Set the project name project(jeu) # Find sources file(GLOB sources CONFIGURE_DEPENDS "src/*.hpp" "src/*.cpp") message(STATUS ${sources}) # Add target to build the executable add_executable(jeu ${sources})
Ensuite, place-toi qui contient CMakeLists.txt et lance :
cmake .
Exemple : chez moi l'ensemble du projet est stocké dans le dossier /home/mando/toto
(mando@aldur) (~/toto) $ cmake .
-- The C compiler identification is GNU 11.3.0
-- The CXX compiler identification is GNU 11.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- /home/mando/toto/src/Arme.cpp/home/mando/toto/src/Arme.hpp/home/mando/toto/src/Personnage.cpp/home/mando/toto/src/Personnage.hpp/home/mando/toto/src/main.cpp
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mando/toto
Cela crée dans le dossier courant un fichier Makefile (et quelques autres fichiers internes à cmake). Maintenant qu'on a ce fichier, on peut lancer la commande suivante :
make
Exemple :
(mando@aldur) (~/toto) $ make
[ 25%] Building CXX object CMakeFiles/jeu.dir/src/Arme.cpp.o
[ 50%] Building CXX object CMakeFiles/jeu.dir/src/Personnage.cpp.o
[ 75%] Building CXX object CMakeFiles/jeu.dir/src/main.cpp.o
[100%] Linking CXX executable jeu
[100%] Built target jeu
Tu devrais alors voir apparaître dans le dossier courant un exécutable jeu, que tu peux lancer :
(mando@aldur) (~/toto) $ ./jeu
vie: 100
mana: 100
Arme : Epee rouillee (Degats : 10)
Bonne chance