Forum: PC-Programmierung C: Linker und Bibliotheken


von Dieter (Gast)


Lesenswert?

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.

von Rolf M. (rmagnus)


Lesenswert?

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.

von Dieter (Gast)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Rolf M. (rmagnus)


Lesenswert?

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

von Nase (Gast)


Lesenswert?

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.

von Jim M. (turboj)


Lesenswert?

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.

von dieter (Gast)


Lesenswert?

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?

von Rolf M. (rmagnus)


Lesenswert?

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
Noch kein Account? Hier anmelden.