Die msvcr100.dll auslassen, wenn Sie in C / C ++ für Windows entwickeln?

7

Ist es möglich, in C / C ++ für Windows zu entwickeln und nicht mit der msvcr100.dll zu verlinken?

Ich verstehe, dass dies die Standard-C-Bibliothek für Windows ist, aber ich frage mich, wie alle Programme auf meinem Computer ausgeführt werden könnten, wenn ich nicht Visual Studio oder das Redistributable-Paket installiert hätte?

    
Erik 17.05.2012, 12:00
quelle

3 Antworten

16

Klicken Sie mit der rechten Maustaste auf Ihr Projekt im Fenster Projektmappen-Explorer, Eigenschaften, C / C ++, Codegenerierung, Laufzeitbibliothek. Ändern Sie es in / MTd. Wiederholen Sie für die Release-Konfiguration die Option / MT

Sie werden jetzt die statische Version des CRT verknüpfen, alle Funktionen, die Sie verwenden, werden direkt mit Ihrer EXE verknüpft, anstatt sie zur Laufzeit von msvcr100.dll zu holen. Sie müssen also nicht mehr die DLL zusammen mit Ihrem Programm bereitstellen.

Vermeiden Sie die Verwendung dieser Option, wenn Sie eigene DLLs erstellen. Es wird dann wichtig, dass diese DLLs und die EXE dieselbe CRT verwenden, so dass sie alle den gleichen CRT-Zustand und den gleichen Heap teilen. Denn wenn das nicht der Fall ist, haben Sie unangenehme Probleme mit der Übergabe von C ++ - Objekten oder -Zeigern, die von einem Codeblock zu einem anderen freigegeben werden müssen. Eine AccessViolation, wenn Sie Glück haben, ein Speicherleck, wenn Sie nicht sind.

    
Hans Passant 17.05.2012, 13:33
quelle
2

Wenn Sie Ihr Projekt darauf beschränken, nur die Programmiersprache / Bibliothek C zu verwenden, können Sie verlinken Sie nur gegen MSVCRT.lib, das in jeder Windows-Version seit Windows XP SP3 vollständig gebacken ist.

Dies bedeutet, dass Sie nicht nur abhängig von MSVCR100.DLL (oder einer anderen Visual Studio-DLL), sondern nur mit den Standard-C-Funktionen in MSVCRT verknüpfen können. By the way, diese Technik wird in CoApp Projekt unter dem Dach von Microsoft entwickelt, so würde ich es als eine gute Praxis in solchen Fällen als Ihre betrachten.

Laden Sie einfach Windows DDK herunter und verknüpfen Sie nur mit $(DDKInstallPath)lib\Crt$(DDKPlatform)\msvcrt.lib

    
mloskot 17.05.2012 14:18
quelle
1

Unter Windows bezweifle ich, dass es möglich ist, ein nicht-triviales Programm zu erstellen, das den CRT nicht irgendwie verwendet.

Es ist möglich, den CRT ohne Verbindung zu msvcrXXX.dll zu verwenden - verbinden Sie stattdessen einfach mit den statischen Bibliotheken. Aber um deine Frage zu beantworten:

  

Wie alle Programme auf meinem Computer laufen könnten, wenn ich nicht Visual hatte   Studio oder das Redistributable-Paket installiert?

Wenn die Programme auf Ihrem PC mit msvcrtxxx.dll verbunden waren, konnten sie nicht. Sinnvollerweise wurde der Redist, den ein bestimmtes Programm benötigte, bereits auf Ihrem PC installiert, bevor Sie überhaupt mitkamen. Oder zumindest die Teile des Redis, die das Programm benötigt.

    
John Dibling 17.05.2012 12:25
quelle