warum muss verpackte dll zur Laufzeit vorhanden sein?



  • In Visual Studio 2013 habe ich eine DLL Projekt erstellt. Es geht um eine C++ Wrapper DLL, die ein paar Funktionen direkt aus einer anderen LIB (sagt ORIGIN.LIB) aufruft. In derselben Projektmappe habe ich ein Testprojekt (exe) erstellt. Das Testprojekt hat Verweis auf der DLL Projekt. Kompilieren des ganzen Projekmappe geht problemlos durch. Allerdings wird eine Fehlermeldung beim Debuggen ausgegeben: es fehlt ORIGIN.DLL auf dem Rechner.

    Hier fragt sich, warum ORIGIN.DLL zur Laufzeit notwendig ist. ORIGIN.LIB hätte schon in meiner dll verpackt werden müssen. Liegt der Fehler an meiner Einstellung?



  • Ist ORIGIN.LIB denn eine statische Lib (d.h. enthält sie den ganzen Code)?
    Bei einer dynamischen Lib brauchst du selbstverständlich die DLL zur Laufzeit.



  • Unter Windows ist LIB nicht statische Bibliothek und DLL dynamische Bibliothek? Meiner Auffassung ist: nach Kompilieren werden alle relevanten Implementierungen aus ORIGIN.LIB in meiner Wrapper DLL verpackt, mein Testprojekt verweist lediglich auf meine Wrapper DLL anstatt die ORIGIN.DLL.



  • factorypattern schrieb:

    Unter Windows ist LIB nicht statische Bibliothek und DLL dynamische Bibliothek? Meiner Auffassung ist: nach Kompilieren werden alle relevanten Implementierungen aus ORIGIN.LIB in meiner Wrapper DLL verpackt, mein Testprojekt verweist lediglich auf meine Wrapper DLL anstatt die ORIGIN.DLL.

    Nein, das ist ein Missverständnis. Bei LIB-Dateien kann es sich entwender um eine statische Bibliothek handlen (das erkennt man meist auf den ersten Blick daran, dass diese Datei in etwa die selbe Größe hat wie die DLL-Datei), oder aber eis handelt sich um eine Importbibliothek (wie wahrscheinlich in deinem Fall), in der lediglich die Funktionen und anderen Symbole aufgelistet sind, welche die zugehörige DLL-Datei zur Verfügung stellt.

    Gelinkt wird immer gegen eine LIB-Datei, und wenn es sich dabei um eine DLL-Importbibliothek handelt, benötigt das Programm selbstverständlich die DLL-Datei, wenn es ausgeführt wird.
    Um mehr Klarheit zu schaffen, kann man die Information statisch/import auch in den Dateinamen einfließen lassen. Z.B. bei mit GCC gebauten Projekten findet man oft bibliothek.a und bibliothek.dll.a (.a-Dateien sind das GCC-Äquivalent zu LIB-Dateien).

    Finnegan


Log in to reply