Kdevelop 3.5.0: Statisches Linken geht nur manuell

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
AspeLin
Beiträge: 664
Registriert: 19.06.2003 16:06:16
Wohnort: Berlin

Kdevelop 3.5.0: Statisches Linken geht nur manuell

Beitrag von AspeLin » 30.01.2008 18:05:34

Hallo,

ich versuche über Kdevelop ein Programm statisch gegen SDL zu linken (ich kenne die LGPL). Dabei muß ich auch andere Bibliotheken angeben. Meine LDFLAGS sehen ungefähr so aus:

Code: Alles auswählen

-static -lvga -ldirectfb -laa [...] -lSDL_image [...]
Beim Linken (aus Kdevelop) bekomme ich etwa folgende Meldung:

Code: Alles auswählen

g++ -o foo foo1.o foo2.o -lvga -ldirectfb /usr/lib/libaa.a [...] -L/usr/lib -L/usr/share/qt3/lib /usr/lib/libesd.a /usr/lib/libaudiofile.a -lpulse-simple /usr/lib/libSDL_image.a -lpthread -lpng /usr/lib/libSDL_mixer.a /usr/lib/libmikmod.a -ldl -lm /usr/lib/libSDL_ttf.a /usr/lib/libfreetype.a -lz /usr/lib/libSDL.a -Wl,--rpath -Wl,/usr/lib
Wie man sehen kann, steht bei einigen meiner angegebenen Nicht-SDL-Bibliotheken der komplette Pfad, bei anderen nicht. Sie werden anscheinend willkürlich zwischen den Optionen verteilt. Interessanterweise kann genau gegen die Bibliotheken nicht gelinkt werden, die mit vollem Pfad in der Meldung auftauchen (hier libaa.a, s.o.):

Code: Alles auswählen

/usr/lib/libSDL.a(SDL_aaevents.o): In function `AA_PumpEvents':
(.text+0x38e): undefined reference to `aa_getevent'
collect2: ld returned 1 exit status
Wenn ich g++ manuell aus der Shell aufrufe (bei erstellten Objekten) und die Bibliotheken gleich hinter /usr/lib/libSDL_image.a angebe, dann geht es:

Code: Alles auswählen

g++ -o foo foo1.o foo2.o /usr/lib/libSDL_image.a -lvga -ldirectfb -laa [...] -L/usr/lib /usr/lib/libSDL_mixer.a
/usr/lib/libmikmod.a -ldl -lm /usr/lib/libSDL_ttf.a /usr/lib/libfreetype.a -lz /usr/lib/libSDL.a -Wl,--rpath -Wl,/usr/lib
Ich habe größere Sachen noch nie statisch verlinkt, könnte also was ganz Dummes sein! Das Verzeichnis für die Qt-Libs gibt Kdevelop wohl profilaktisch an, aber daran liegt es nicht.
Täuschung ist das Silikon der Postmoderne.

Antworten