Re: C++ et includes

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: guilde
Subject: Re: C++ et includes
Bonsoir !

Hugues Levasseur a écrit :
> /usr/bin/ld : [...] référence indéfinie


Quand tu écris un programme C++ réparti en plusieurs fichiers source, le
build se fait en deux étapes :

1. compiler chaque fichier source en un fichier objet
2. lier ces fichiers objets en un exécutable.

Le message d'erreur que tu vois n'est pas un problème de compilation à
proprement parler. Il provient de ld, l'éditeur de liens. Il dit qu'il
n'a pas trouvé une fonction que tu as appelée. Et pour cause, elle était
définie ailleurs.

Il faut que tu appelles g++ avec l'option -c. Ça veut dire « compile,
mais ne fais pas d'édition de liens dans la foulée ». Une fois que tu as
tous les fichiers objet, tu rappelles g++ une dernière fois en lui
donnant à manger ces objets, et avec l'option -o pour indiquer le
fichier de sortie :

    g++ -c fonctions.cpp   # → fonctions.o
    g++ -c binaire-V5.cpp  # → binaire-V5.o
    g++ fonctions.o binaire-V5.o -o binaire-V5  # édition de liens


Ci-dessous un Makefile adapté. Une fois que tu as le bon Makefile, tu
peux juste taper « make ».

À+,

Edgar.

-- 8< ------------------------------------------------------------------
CXXFLAGS = -O -Wall -Wextra

binaire-V5: fonctions.o binaire-V5.o
    g++ $^ -o $@


%.o: %.cpp
    g++ $(CXXFLAGS) -c $<


fonctions.o: fonctions.h
binaire-V5.o: fonctions.h

clean:
    rm -f fonctions.o binaire-V5.o binaire-V5


.PHONY: clean
-- 8< ------------------------------------------------------------------