Heutige Compiler und DLL-Dateien



  • Naja, damals waren halt die nötigen DLLs halt schon bei Windows dabei. Wären die nicht dabei gewesen, hätte man sie genauso wie heute mitliefern müssen. MSVC7.0, 7.1 und 8.0 sind halt NACH WindowsXP erschienen, also wie sollte bei WindowsXP (und den älteren Windows-Versionen sowieso) die neuen Runtimes beiligen?

    Bei Windows Vista werden bestimmt die Runtime-DLLs von MSVC 8.0 dabei sein und dann wird man sicherlich keine Runtime für Vista mitliefern müssen.

    Aber nach Vista werden wieder neue MSVC-Runtimes erscheinen und das Spiel wird wieder von vorne losgehen. 😃



  • Weil der Programmierer zu Faul ist alles selber zu machen und irgendwelche Bibliotheken nutzt!? (CRT/STL/MFC/ATL)

    Nein, ich rede hier von simplen Konsolenanwendungen nach dem ISO-Standard. Diese sind in Min GW unverhältnismäßig groß (weil er DLL-Dateien statisch linkt) und in VCExpress brachen sie DLL-Dateien und ein Manifest (soweit ich weiß).

    Du kannst VC2005 Projekte auch statisch linken, dann musst Du keine DLLs mitliefern!

    Dann werden die Programme wieder viel zu groß.

    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. 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.

    Naja, damals waren halt die nötigen DLLs halt schon bei Windows dabei.

    Wie gesagt, VC6 Standard kann weder statisch linken, noch zeigt mir der Dependency Walker an, dass das Programm von irgendeiner externen DLL abhängig wär, außer von der kernel32.dll. Nur MFC-Programme brauchen die MSVCRT, Konsolenanwendungen funktionieren auch ohne und die Programme sind trotzdem sehr klein. Ergo: Früher war alles besser.



  • 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


Anmelden zum Antworten