[VS 05/08] Fragen zur Runtime
-
Hallo,
ich habe mal ein bisschen an den Compiler-Einstellungen bei VS 05 und 08 rumprobiert und jetzt hab ich zwei Fragen:1. Es gibt ja die Option "Multithreaded DLL", dann wird die "MSVCR80.DLL" dynamisch mit der Executable verknüpft. Ich dachte, bei "Multithreaded" würde der Compiler die Runtime einfach nur statisch linken. Ein Blick in die Datei mittels PEview zeigte aber, dass nun eine Menge Funktionen aus der Kernel32.dll importiert wurden. Und auch der Disassembler zeigte, dass bei "Multithreaded" ziemlich viele Sachen mit den Kernel-Funktionen gemacht werden. Meine Frage: Wird die C-Runtime nun statisch gelinkt oder wird sie mit Hilfe von Kernel-Funktionen "nachgemacht"?
2. Ist in der Redistributable für Visual C++ 2008 die 2005er Version mit drin, oder muss man die separat installieren?
Dankeschön im Voraus!
-
Wenn Du was auswähltst ohne "DLL", so wird die *CRT* statisch gelinkt.
Das Programm benötigt aber natürlich irgendwelche Dinge vom OS, und deswegen wird auch "kernel32" benötigt.... oder was soll Dein Programm machen, wenn es keine Funktionen des OS aufrufen soll?
Das Redistributable von VS2005 ist mit dabei, ausser bei der Express-Edition, da musst Du es separat runterladen:
http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=de
-
Danke für deine Antwort.
Ich hab mich nur gewundert, dass bei einer dynamischen CRT viele Kernel-Funktion nicht gebraucht werden.Und zur zweiten Frage: Ich meinte, ob in der Redist für 2008 ( also dieser hier -> http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en ) die Redistributable für 2005 mit dabei ist. Wenn der Benutzer meines Programmes die 2008er CRT installiert hat, werden dann auch alle Programme, die die 2005er brauchen funktionieren?
-
Wenn du die CRT statisch linkst, werden Funktionen der kernel32.dll von deiner exe/dll direkt verwendet. Wenn du sie dynamisch linkst, wird die kernel32.dll von der jeweiligen CRT-DLL verwendet.
Die Runtime-DLLs müssen jeweils passend zur verwendeten CRT-Version (auf den Service Pack genau :)) installiert werden. Du kannst auch einfach nur die DLLs dazulegen (damit entfällt die Installation), so wie in der redist.txt beschrieben. Es gibt da keine Rückwärtskompatibilität auf der Binärebene.
-
Danke, Superlexx!
Jetzt ist alles klar.