Haftungsausschluss: Dies ist eine Problemumgehung , keine Lösung für Ihre Antwort, aber dennoch eine sehr praktikable Möglichkeit.
Wenn Sie absolut sicher sein möchten, dass es keine Abhängigkeiten von VS selbst gibt - diese haben jedoch ihre eigenen Nachteile -, können Sie in den Codegenerierungseinstellungen Multi-Threaded (MT) / Multi-Threaded-Debug (MD) (für Debugbuilds) auswählen ) anstelle von MT DLL (MTd) / MT Debug DLL (MDd).
Was sind die Nachteile?
- Es vergrößert Ihre ausführbare Datei und Ihre Binärdatei (obwohl dies bei der Erstellung eines Spiels wahrscheinlich vernachlässigbar ist).
- Auf diese Weise kompilierte DLLs profitieren nicht von den Laufzeit-DLLs-Updates. (zB wenn Microsoft VC ++ 2015 SP2, SP3, SP4 usw. veröffentlicht.) Aber das liegt bei Ihnen.
- Mehr RAM-Nutzung (auch vernachlässigbar), da Sie vorhandenen / geladenen Code (DLLs) nicht wiederverwenden
- Sie müssen sicherstellen, dass alle Bibliotheken, die Sie verknüpfen, mit derselben Laufzeit kompiliert werden. Andernfalls kann die Verknüpfung fehlschlagen oder es können interessante Laufzeitfehler auftreten (wahrscheinlich nicht, aber es ist mir einmal im Leben in einem Legacy-Projekt passiert, das auf aktualisiert wurde das neueste VS)
Und was sind die Profis?
- Ihre ausführbare Datei hat keine "externen" Abhängigkeiten von VS selbst (keine msvc * .dll-Anforderung).
- Einige Leute sehen dies als eine Leistungssteigerung an, da Sie den DLL-Aufruf-Overhead eliminieren. Dies ist zwar theoretisch der Fall, die Verbesserungen sind jedoch in der Praxis vernachlässigbar
Überprüfen Sie diesen Link für eine ausführlichere Erklärung und für die Fehler, die bei der Verwendung einer statischen Laufzeit auftreten können.
Eine andere Problemumgehung wäre, alle erforderlichen DLLs dort abzulegen, wo sich Ihre Binärdatei befindet. Ihre Anwendung profitiert nicht von Updates (für die Laufzeitbibliotheken), aber das war's.
Die eigentliche Lösung besteht darin, die Anwendung im Release- / Non-Debug-DLL-Modus (MTd) zu verteilen und das richtige VC ++ - weiterverteilbare Installationsprogramm (und alle anderen möglicherweise verwendeten Bibliotheksinstallationsprogramme, z. B. OpenAL, DirectX9, PhysX) bereitzustellen und den Benutzer ausführen zu lassen bevor Sie Ihre Anwendung ausführen (wie andere Antworten gezeigt haben).
Stellen Sie außerdem sicher, dass der Benutzer weiß, dass er / sie möglicherweise seine / ihre GPU-Treiber aktualisieren muss (da diese mehrere Laufzeiten für viele Anwendungen enthalten, z. B. OpenGL, Vulcan).