Houyhnhnm: Dynamische Bibliotheken fest einkompilieren?

Beitrag lesen

Hallo Markus,

Was ich dabei nicht verstehe, ist, warum beispielsweise <iostream>, <stdio.h>, o.ä. Bibliotheken in das Programm einkompiliert werden, ohne dass sich der Endbenutzer des Programms explizit darum kümmern muss, dass er dieses erforderlichen Bibliotheken auf seinem System hat, wohingegen das bei SDL.h nicht funktioniert.

Das hat einen ganz banalen Grund: Der Linker liest automatisch eine Liste von .LIBs ein, dabei natürlich die C-Laufzeitbibliothek. Um dieses Verhalten zu unterdrücken, gibt es i.d.R. einen extra Schalter - den braucht man aber nur in ganz speziellen Fällen.

Würde ich versuchen mit g++ programm.cpp -o programm das Programm zu kompilieren, kann der Compiler SDL.h ohne direkte Angabe von -lSDL nicht einkompilieren.

Wenn ich mich recht erinnere, ist -l der Parameter zur Angabe zusätzlicher Bibliotheken an den Linker. Der Compiler kommt auch ohne -l aus - er erzeugt einfach eine externe Referenz auf die Bibliothekssymbole. Nur der Linker stellt hinterher fest, daß nicht alle Referenzen aufgelöst werden konnten und beendet mit Fehler.

Ich finde, das Verfahren ist wirklich nicht kompliziert - man schreibt einmal die entsprechenden Parameter in den Make-File, oder wie immer das Ding heißt und die Sache ist erledigt.

Gruß,

Houyhnhnm