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 = dynamischstatisch 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-DLLswenn 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.