Heutige Compiler und DLL-Dateien
-
Artchi schrieb:
Naja, damals waren halt die nötigen DLLs halt schon bei Windows dabei.
Nein! Die waren damals auch nicht dabei! Nur seid W2k wird die msvcrt.dll mitgeliefert! W2k kam aber weiter später als VC6 raus!
-
Früher war alles besser schrieb:
Das ist auch heute noch so, wenn Du statisch linkst! Wenn Du mit VC6 gegen die DLL linkst, dann musst Du auch die msvcrt.dll mitliefern!
Nicht bei Konsolenanwendungen.
Das hat doch mit "Consolen-Anwendung" nichts zu tun! Ob es eine Consolen oder Windows-Anwendung ist hängt nur von einem Bit im PE-header ab...
Früher war alles besser schrieb:
Ich habe mal den Test gemacht: Windows 95 installiert und dann Anwendungen, die vorher (nicht auf Windows 95) mit dem VC6 kompiliert worden waren, dort ausprobiert: Konsolenanwendung lief. WinAPI-Anwendung lief. MFC-Anwendung lief nicht, verlangte die MFC42.dll und die MSVCRT.dll.
Als ich diese beiden Dateien in den Systemordner kopiert hatte, lief das MFC-Programm auch. Ergo bedeutet das: Konsolenanwendungen in VC6 linken nicht gegen die MSVCRT.dll (kann man mit dem Dependency Walker nachprüfen). Und statisch kann es auch nicht gewesen sein, weil das bei meiner alten Standard-Version von VC6 gar nicht geht und das Programm ja dann wieder viel größer wäre.
Ich sage es noch ein letztes mal: Wenn Du CRT Funktionen verwendest (was auch ein normales C/C++ Programm macht (auch Consolen-Programm)) dann hängt es nur davon ab, ob Du gegen die statische CRT linkst oder gegen die DLL-Version der CRT!
-
Was ist denn die statische CRT? Meinst du damit nur das statische Linken der msvcrt.dll in eine Anwendung oder sind statische CRT und DLL-Version der CRT was anderes?
-
Früher war alles besser schrieb:
Was ist denn die statische CRT? Meinst du damit nur das statische Linken der msvcrt.dll in eine Anwendung oder sind statische CRT und DLL-Version der CRT was anderes?
Die statische CRT heisst "libcmt.lib" und nicht "msvcrt.dll!
Wenn Du gegen die "msvcrt.lib" linkst, dann benötigst Du due msvcrt.dll (welche Du mit ausliefern musst; ja auch schon bei VC6).Wenn Du gegen die libcmt.lib linkst, dann musst Du nur die EXE ausliefern und sonst nix.
Siehe auch: C Run-Time Libraries
http://msdn2.microsoft.com/abx4dbyh
-
Die libcmt ist 853KB groß. Wie kommt es, dass die Anwendungen trotzdem viel kleiner sind, obwohl sie dagegen linken?
-
Früher war alles besser schrieb:
Die libcmt ist 853KB groß. Wie kommt es, dass die Anwendungen trotzdem viel kleiner sind, obwohl sie dagegen linken?
sie benutzen supercodes und linken nur die funktionen rein, die sie auch aufrufen.
-
Früher war alles besser schrieb:
Die libcmt ist 853KB groß. Wie kommt es, dass die Anwendungen trotzdem viel kleiner sind, obwohl sie dagegen linken?
Das ist Magie!
Oder der Linker hat doch die Funktionen rausgelassen, die niemand aufruft...
-
Wenn man einfach gegen diese libcmt.lib linken kann und dann nur der nötige Code eingefügt wird (sodass die Anwendung klein bleibt) und es auch keine externen Abhängigkeiten gibt, wieso gibt es dann überhaupt dieses ganze Hickhack mit DLL und Manifest und hier und da und hast du nicht gesehen? Dann könnte ich doch auf diese msvcrt komplett verzichten. Wieso also brauche ich beim Express noch ein Manifest und wieso sind die Anwendungen beim Min GW so riesig?
-
Früher war alles besser schrieb:
Wenn man einfach gegen diese libcmt.lib linken kann und dann nur der nötige Code eingefügt wird (sodass die Anwendung klein bleibt) und es auch keine externen Abhängigkeiten gibt, wieso gibt es dann überhaupt dieses ganze Hickhack mit DLL und Manifest
Naja, das ist eine gute Frage... der Code wird halt noch etwas kleiner, wenn man DLLs "wiederverwendet"...
Früher war alles besser schrieb:
Wieso also brauche ich beim Express noch ein Manifest
Wie gesagt, wenn Du gegen die statische CRT linkst, brauchst Du kein Manifest.
Früher war alles besser schrieb:
wieso sind die Anwendungen beim Min GW so riesig?
Keine Ahnung; kenn den Compiler nicht.
-
volkard schrieb:
sie benutzen supercodes ...
Ne ne, fang nicht damit an! Ich hab mir gerade den Thread ganz durchgelesen. Das hält man ja im Kopf nicht aus!
Schluss jetzt endgültig damit und ja nicht wieder ausgraben!!!yogle