Shared /dynamisch / statisch Kompilieren



  • Hallo,

    kürzlich habe ich von einem Unterschied zwischen shared / dynamischem / statischem Kompilieren gehört und würde gern mal wissen, was das denn genau ist und worin der Unterschied zwischen shared bzw. dynamischem bzw. statischen Kompilieren ist.
    Hat das denn irgendwas damit zu tun, dass es sowohl Libraries mit der Endung .a als auch mit der Endung .dll gibt??

    Ich wäre für eine Erläuterung sehr dankbar!

    Viele Grüße
    Honk



  • Hallo Tim/Honk,

    shared kompilierung kenne ich nicht, bezieht sich aber bestimmt auf DLLs
    die zwischen den prozessen geteilt werden.

    dynamische kompilierung bedeutet, dass der kompilier funktionen, die aus
    einer DLL kommen (alle C-funktionen) in eine tabelle in die fertige datei
    kommen. dadurch wird die datei kleiner aber läuft nur auf rechnern, die
    die c-runtime installiert haben.

    statische kompilierung bedeutet, dass die funktionen in die datei
    mitkompiliert werden. das vergrößert die datei natürlich, macht sie aber
    auf "allen" rechnern lauffähig.



  • Hallo,

    vielen Dank für die Erklärung!
    Und ich vermute dann mal, dass bei der Statischen Compilierung die Libs mit der Endung .a bzw. .lib verwendet werden, oder? Oder wäre es rein theoretisch auch möglich, eine Dll statisch ins Programm zu "schmelzen"?

    Und noch was:
    Wie bestimme ich, ob mein Compiler statisch bzw. dynamisch kompiliert?

    Viele Grüße
    Tim



  • Und ich vermute dann mal, dass bei der Statischen Compilierung die Libs mit der Endung .a bzw. .lib verwendet werden, oder?

    jop

    .lib / .a = statisch
    .dll = dynamisch

    statisch reinzuschmelzen hmmm...
    du könntest die dll vllt als resource einbinden, einfach zum projekt hinzufügen.
    nicht getestet, könnte aber klappen, LoadLibrary findet schließlich auch
    resourcen-DLLs

    wenn du die .lib oder .a als abhängigkeit in den projekteinstellungen
    hinzufügst, wird das ganze statisch, die DLL wird zur laufzeit automatisch
    zugelinkt.

    dynamisch ist schon ein bisschen schwerer, einen guten link hab ich
    Hier und Hier.



  • Tim18 schrieb:

    Wie bestimme ich, ob mein Compiler statisch bzw. dynamisch kompiliert?

    Das musst du bei den einzelnen Bibliotheken regeln. Oft werden statische und dynamische Versionen angeboten, dann bindest du eben die richtige ein.

    Was die CRT (C-Runtime-Bibliothek) angeht, kannst du das oft in den Projekteinstellungen festlegen.


Anmelden zum Antworten