Verständnisfrage : lib/dll und Header
-
@SoIntMan sagte in Verständnisfrage : lib/dll und Header:
Ok das Header und lib getrennt sind, habe ich so verstanden damit , die lib austauschbar ist, solange sich nichts an der Signatur des Header ändert.. das habe ich so verstanden.
Und bei Dlls braucht mal trotzdem die Header? (wie bei libs?)
Verwenden dann andere Plattformen außer Windows keine Dlls?
Doch. Im Linux-Umfeld heißen die nur anders.
https://stackoverflow.com/questions/9688200/difference-between-shared-objects-so-static-libraries-a-and-dlls-so
-
Mahlzeit;:) Super wieder mal sehr hilfreich eure Antworten.
d.h. wenn ich eine "C++ Klassenbibilothek" als Dll erstelle, kommt eine lib mit. Und ich muss dann im gleichen Prinzip die lib dem Linker vorhanden. Aber dann habe ich das Prinzip von Dlls nicht verstanden, wenn man dann trotzdem Libs braucht? Oder sind diese dann nur Abgespeckt?
-
@SoIntMan sagte in Verständnisfrage : lib/dll und Header:
Prinzip von Dlls nicht verstanden, wenn man dann trotzdem Libs braucht? Oder sind diese dann nur Abgespeckt?
Du brauchst die DLL zur Laufzeit, die Lib beim Linken. In der Lib steht, wo und in welcher DLL zur Laufzeit der ausführbare Code gefunden werden kann.
-
@manni66 sagte in Verständnisfrage : lib/dll und Header:
@SoIntMan sagte in Verständnisfrage : lib/dll und Header:
Prinzip von Dlls nicht verstanden, wenn man dann trotzdem Libs braucht? Oder sind diese dann nur Abgespeckt?
Du brauchst die DLL zur Laufzeit, die Lib beim Linken. In der Lib steht, wo und in welcher DLL zur Laufzeit der ausführbare Code gefunden werden kann.
Wie schon angedeutet ist das nur unter windows notwendig. Unter linux z.b. gibt es keine .lib Dateien. Da wird direkt die .so (.dll equivalent) oder .a (.lib, wenn statische library) dem linker übergeben.
-
Ok , bei Dlls habe ich demnach eine lib für den linker und H für den compiler!
Ich habe mich bissel eingelesen, wenn LoadLibrary verwende, brauche ich keine lib, da ich da nur FuncPtr /Methoden binde oder? Außer ich muss Typen bekannt machen!?
Ohje.. wenn ich Euch auf den Geist gehe,sagt es
-
@SoIntMan sagte in Verständnisfrage : lib/dll und Header:
Ok , bei Dlls habe ich demnach eine lib für den linker und H für den compiler!
Ich habe mich bissel eingelesen, wenn LoadLibrary verwende, brauche ich keine lib, da ich da nur FuncPtr /Methoden binde oder? Außer ich muss Typen bekannt machen!?
Nö. Auch dann brauchst Du das nicht.
Nehmen wir an, Du hast eine einzige Methode, in Deiner DLL, die Du aufrufst. Diese liefert nur einen Zeiger. Dieser Zeiger ist ein Interface... und schon kannst Du komplexeste Dinge bauen.
Also man baue eine Factory Funktion und die liefert brav Interfaces zu Objekten.Das ist COM auf "billig"...
-
Guten Morgen
Ich habe bissel am WE gelesen , und bin da auf simple Pll Plugin Konzepte gestoßen. Da werden ja auch zur Laufzeit Dlls geladen , sie müssen nur eine bestimmte API (Interface) Klasse implementieren (@Martin-Richter das meintest du damit gell)!? Und dieser Mechanismus funktioniert ja bei LoadLibrary... so wie ich verstanden habe.
Aber @manni66 schrieb :"Man kann mit einer DLL kein Programm linken. Auch wenn man DLLs verwenden will, muss man mit einer dazugehörigen lib linken."
Das raff ich nicht, wann brauche ich eine lib zur Dll und wann nicht.. bei nem "Plugin System brauch ich wohl keine" ... Ich warte noch auf den "AHAAA -Effekt")
-
Die Lib benötigst Du immer für das Implizite Linken. Sonst nicht.
Mit der Lib teilst Du dem Linker mit, welche DLL für welche Funktion zum Programm geladen werden muss... das geschieht dann implizit beim Laden.Lib <=> Implizites Linken...
Wenn Du also ein Interface hast, benötigst Du dessen Layout und das steckt im Header file.
Allerdings musst DU natürlich die Signatur der Funktionen in Deiner DLL kennen.
-
@SoIntMan sagte in Verständnisfrage : lib/dll und Header:
Das raff ich nicht, wann brauche ich eine lib zur Dll und wann nicht.. bei nem "Plugin System brauch ich wohl keine" ... Ich warte noch auf den "AHAAA -Effekt")
Wenn du den Linker verwenden willst um "automatisch" gegen die DLL zu linken - so wie es auch bei statischen Libs funktioniert - dann brauchst du die "import LIB" für die DLL. Weil der Linker die halt braucht.
Wenn du LoadLibrary verwendest um die DLL "manuell" zu laden, dann brauchst du keine "import LIB". Weil der Linker hier gar nichts von der DLL weiss, und daher auch keine "import LIB" braucht.
-
Jetzt hat es KLICK gemacht,:) DANKE