Woher weiss der Linker welche Bibliotheksdateien (d.h. .so oder .a -Files) er einbinden muss und wo diese gespeichert sind, wenn ich nur eine bestimmte Headerdatei in das Hauptprogramm includiere? Die bereits übersetzten Bibliotheken haben doch andere Namen als die Headerfiles.
Dieter schrieb: > Woher weiss der Linker welche Bibliotheksdateien (d.h. .so oder .a > -Files) er einbinden muss und wo diese gespeichert sind, wenn ich nur eine > bestimmte Headerdatei in das Hauptprogramm includiere? Gar nicht, deshalb muß man dem Linker beides explizit nennen. > Die bereits übersetzten Bibliotheken haben doch andere Namen als die > Headerfiles. Ja. #include hat auch mit dem Linker erstmal nichts zu tun. Das ist eine reine Compiler-Sache. .so- und .a-Files dagegen interessieren den Compiler nicht.
Woher weiß ich welche Information der Linker zur Bibliothek benötigt, wenn ich z.B. #include <gtk/gtk.h> im Hauptprogramm includiere? Zum Kompilieren benötigt mann folgenden Befehl:
1 | gcc gtkhello.c -o gtkhello `pkg-config gtk+-3.0 --cflags --libs` |
Wie heißen in diesem Fall die .so bzw. .a -Bibliothek-Files? Wo sind diese gespeichert?
Dieter schrieb: > Woher weiß ich welche Information der Linker zur Bibliothek benötigt, > wenn ich z.B. #include <gtk/gtk.h> im Hauptprogramm includiere? Das hat in der Dokumentation von gtk zu stehen.
Dieter schrieb: > Woher weiß ich welche Information der Linker zur Bibliothek benötigt, > wenn ich z.B. #include <gtk/gtk.h> im Hauptprogramm includiere? > Zum Kompilieren benötigt mann folgenden Befehl: > gcc gtkhello.c -o gtkhello `pkg-config gtk+-3.0 --cflags --libs` > Wie heißen in diesem Fall die .so bzw. .a -Bibliothek-Files? Wo sind > diese gespeichert? Das wird in diesem Fall von pkg-config bereitgestellt. Wenn du wissen willst, was das genau ist, kannst du es auch einfach direkt aufrufen.
1 | pkg-config gtk+-3.0 --libs |
Dieter schrieb: > gcc gtkhello.c -o gtkhello `pkg-config gtk+-3.0 --cflags --libs` > Wie heißen in diesem Fall die .so bzw. .a -Bibliothek-Files? Gucks dir doch einfach an. Nicht umsonst gibst du dem pkg-config die --libs-Option mit. > Wo sind > diese gespeichert? Die Standard-Suchpfade verrät dir die Man-Page des Linkers.
Dieter schrieb: > Zum Kompilieren benötigt mann folgenden Befehl: > gcc gtkhello.c -o gtkhello `pkg-config gtk+-3.0 --cflags --libs` > Wie heißen in diesem Fall die .so bzw. .a -Bibliothek-Files? Wo sind > diese gespeichert? Wenn Du diese Frage noch selbst stellen musst, fehlt Dir elementares Grundlagenwissen in Unix/Linux. Das solltest Du dir zuerst mal aneignen, z.B. mittels totem Holz.
Folgender Befehl:
1 | pkg-config gtk+-3.0 --libs |
liefert:
1 | -lgtk-3 -lgdk-3 usw... |
. Für was steht "-lgtk-3"? Müsste diese Datei nicht libgtk-3 heißen? Wo ist diese Datei gespeichert?
dieter schrieb: > Für was steht "-lgtk-3"? Müsste diese Datei nicht libgtk-3 heißen? Die Datei wird libgtk-3.so oder libgtk-3.a heißen. Das lib und die Endung werden aber dem Linker nicht mit angegeben. > Wo ist diese Datei gespeichert? Du weißt, daß es auch unter Linux Programme gibt, mit denen man nach Dateien suchen kann? Heißer Kandidat wird /usr/lib sein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.