2010-04-16 4 views
3

Je crée une application, qui se compose de deux libs statiques et un exécutable.Linux, lib statique faisant référence à lib statique dans un fichier exécutable

Appelons les deux libs statiques: libusefulclass.a libcore.a

Et l'application: monapp

libcore instancie et utilise la classe définie dans libusefulclass (appelons-le UsefulClass)

maintenant, si je lie l'application de la manière suivante:

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o -lusefulclass -lcore 

L'éditeur de liens se plaint des méthodes libusefulclass pas trouvé:

undefined reference to `UsefulClass::foo()' 

etc.

J'ai trouvé une solution pour cela: Si UsefulClass est également instancié dans les fichiers source de l'exécutable lui-même, l'application est liée sans aucun problème.

Ma question est: est-il un moyen plus propre à faire libcore se référer aux méthodes définies dans libusefulclass, ou tout simplement pas statiques libs peut être lié contre l'autre?

TIA

P.S .: Dans le cas qui compte: l'application est développée en C++ en utilisant Qt, mais je pense que ce n'est pas un problème Qt, mais un problème de bibliothèque en général.

Répondre

6

Vous devez spécifier les bibliothèques dans l'ordre inverse des dépendances, donc utilisez

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o -lcore -lusefulclass 

S'il y a une dépendance cyclique, vous pourriez même avoir besoin de spécifier la bibliothèque deux fois,

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o -lusefulclass -lcore -lusefulclass 
+0

Merci, nos, cela l'a en effet fixé. (Remarque: si noyau dépend usefulclass ... Je vais garder à l'esprit la règle mentionnée ci-dessus, pour moi, il semble plus logique dans l'autre sens, à savoir que usefulclass noyau de preceedes, bien que :) – andras

+1

l'éditeur de liens lit le symbole de l'archive et de références défausse quoi que ce soit Noone encore, la prochaine bibliothèque vient et ont besoin de symboles que l'éditeur de liens déjà mis au rebut - de sorte que vous devrez leur fournir dans l'ordre « marche arrière » – nos

Questions connexes