Forum Programmation.c++ Mais pourquoi gcc devient plus strict sur l'ordre des options de compilations ?

Posté par  . Licence CC By‑SA.
Étiquettes :
1
7
mar.
2013

Salut à tous,
J'ai enfin mis une machine à jours de ubuntu 10.4 a 12.4 LTS (Oui je suis à la traine)
et je recompile donc tout les programmes maisons
Voilà que je me tappe le bon vieux undefined reference to
alors que ca marchait sous l'ancienne version

Un peu de googling et je découvre que je dois changer mon Makefile
Avant :

%: %.o 
$(CXX) $(LDFLAGS) -o $@ $^

Après

$(CXX) -o $# $^ $(LDFLAGS)

Pourquoi tant de haine, ou plus sérieusement qu'est-ce qui justifie que gcc ne tolère plus l'ordre inverse ?

  • # Link

    Posté par  . Évalué à 6.

    Ce ne sont pas les options de compilation qui posent problème, c'est l'ordre dans lequel tu spécifie les éléments que tu doit lier. C'est d'ailleurs bizarre que ça marchait avant, parce que l'éditeur de lien ld à toujours été sensible à l'ordre de ses entrées.

    Si ton programme utilise des symboles d'une bibliothèque (et non l'inverse), alors les fichiers *.o doivent être spécifiés avant la bibliothèque en question.

    Autrement dit, LDFLAGS doit toujours se trouver derrière $^

    • [^] # Re: Link

      Posté par  (site web personnel) . Évalué à 1.

      Souvent on sépare le $LDFLAGS des bibliothèques à rajouter, typiquement il contient des -Wl,-optionld .

      Sinon, pour en revenir à l'ordre des bibliothèques, il est important quand on utilise des bibliothèques statiques (il y a une option de ld pour faire plusieurs itérations) mais pas forcément quand on utilise des bibliothèques dynamiques (assemblage à la fin). Il se peut très bien que la mise à jour fasse que maintenant il utilise des bibliothèques statiques alors qu'auparavant c'était des versions dynamiques.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.