Allgemeine Fragen zu Dlls



  • tenchou schrieb:

    bla er meint implicit runtime linking

    Soll das ein Fachbegriff sein?



  • jo hab ich aus wikipedia



  • Er meint bei statisch eingebundenen Funktionen eben, also OHNE DLL.



  • ne dann hätte er ja nicht DLL gesagt. er meinte

    1.statisch gelinkt
    2.dll die mit lib benutzt wird und geladen wird bevor die programmausführung beginnt
    3.dll die explizit mit loadlib geladen wird



  • tenchou schrieb:

    er meinte

    1.statisch gelinkt
    2.dll die mit lib benutzt wird und geladen wird bevor die programmausführung beginnt
    3.dll die explizit mit loadlib geladen wird

    So ist es.

    Warum man Fall 2 nicht "statisch eingebundene DLLs" nennen sollte, erschließt sich mir nicht.



  • .



  • audacia schrieb:

    tenchou schrieb:

    er meinte

    1.statisch gelinkt
    2.dll die mit lib benutzt wird und geladen wird bevor die programmausführung beginnt
    3.dll die explizit mit loadlib geladen wird

    So ist es.

    Warum man Fall 2 nicht "statisch eingebundene DLLs" nennen sollte, erschließt sich mir nicht.

    Weil eine STATISCHE Einbindung einer DYNAMISCHEN Link Library sinnfrei ist. Statische Bindung bedeutet, dass beim Linken der Objektcode in das Binary aufgenommen wird. Und genau das wird eben bei DLLs nicht gemacht - völlig egal ob implizit oder explizite Einbindung.



  • Aber Vorsicht. Soll der Programmcode der DLL nur einmal im Speicher vorliegen dann muss immer die gleiche DLL aufgerufen werden. Windows Unterscheidet auch hier in welchem Verzeichnis sich diese befindet. 2 Aufrufe mit Unterschiedlichen Verz. laden auch den selben Code 2 Mal in den Speicher was eigentlich nicht der Sinn einer DLL ist.



  • this->that schrieb:

    Weil eine STATISCHE Einbindung einer DYNAMISCHEN Link Library sinnfrei ist.

    Aus Sicht des Programmierers ist es eine teils vom Linker, teils vom PE-Loader vorgenommene statische Einbindung, da der Code weder manuell (dynamisch) geladen werden muß noch kann. Der Begriff "statisches Einbinden einer DLL" gibt diesen Sachverhalt IMHO unzweideutig wieder - DLLs können nur zur Laufzeit geladen, aber statisch eingebunden werden.



  • Wie gesagt: statisch ist zur Compile/Linkzeit, dynamisch zur Laufzeit. Die Begriffe sind eigentlich gut definiert...
    Aber es sei dir freigestellt weiter deine Terminologie zu benutzen;)



  • Weil eine STATISCHE Einbindung einer DYNAMISCHEN Link Library sinnfrei ist.

    Nicht ganz ! oder hasst du ne andere Idee um nen funktionalitaet aus nem compilierten binary das ne andere runtime nutzt, in deiner App zu verwenden ?

    Dll's sind unter anderem auch gut, wenn man projekte entkoppeln will. also teilaufgaben einem anderen Team / firma zuweissen will die ne andere runtime / anderen compiler verwenden.

    klar kann man die nicht mit der vom dll compiler generierten importlib linken lassen, aber vielleicht kann man die importlib vom eigenen compiler bauen lassen.

    oder die lib selber proggen ...

    Ciao ...



  • this->that schrieb:

    Wie gesagt: statisch ist zur Compile/Linkzeit, dynamisch zur Laufzeit. Die Begriffe sind eigentlich gut definiert...

    Das steht nicht im Widerspruch zum Begriff der statisch eingebundenen DLL. Für die formelle Einbindung sorgen ja Compiler und Linker, lediglich das Laden der Datei erledigt das Betriebssystem. Das Laden der DLL geschieht überdies auch nicht zur Laufzeit, sondern kurz davor, nämlich wenn der PE-Loader die Anwendung initialisiert.

    Abschließend sollte ich vielleicht auf den entsprechenden MSDN-Artikel verweisen:

    MSDN - Linking an Executable to a DLL schrieb:

    Implicit linking is sometimes referred to as static load or load-time dynamic linking.

    Demnach können wir uns auf den weniger explanativen, aber offenbar gemeinhin gebräuchlichen Begriff "implizites Linken" einigen 😉


Anmelden zum Antworten