Frage

Ich Frage mich, wie um einen release-build, enthält alle notwendigen dll-Dateien in den .exe-Datei, damit das Programm ausgeführt werden kann, auf einer nicht-Entwicklung der Maschine ohne die Installation des microsoft redistributable auf die Ziel-Maschine.

Ohne dabei erhalten Sie die Fehlermeldung, dass die Anwendungskonfiguration nicht korrekt ist und zu installieren.

War es hilfreich?

Lösung

  1. Wählen Sie Projekt -> Eigenschaften
  2. Wählen Sie Konfiguration -> Allgemein
  3. In der box für die, wie Sie sollten, MFC-link, wählen Sie statisch zu verknüpfen.
  4. Wählen Sie Linker -> Eingabe.Unter Zusätzliche Abhängigkeiten, fügen Sie alle Bibliotheken, die Sie benötigen Ihre app, um statisch link.

Andere Tipps

Sie müssen set die run-time-library (Unter C/C++ -> Code Generation), die für ALLE Projekte zur statischen Verknüpfung, die bezieht sich auf die folgende Standard-Gebäude-Konfigurationen:

  • Multithread-Debug/Release
  • Single-Threaded Debug/Release

Im Gegensatz zu den "DLL" - Versionen dieser Bibliotheken.

Selbst wenn Sie das tun, abhängig von den Bibliotheken, die Sie verwenden, müssen Sie möglicherweise installieren Sie ein Merge-Modul/framework/etc.Es hängt davon ab, ob statische LIB-Versionen Ihrer Abhängigkeiten zur Verfügung stehen.

Beachten Sie, dass Microsoft wird nicht empfohlen, die statische Verbindung der Laufzeit in Ihr Projekt, da dies verhindert, dass Sie nicht gewartet werden, die von windows update zu beheben kritische Sicherheitslücken.Es gibt auch potenzielle Probleme wenn Sie auf der Durchreise sind Speicher für Ihre wichtigsten .exe und .dll-Dateien wie wenn jede dieser statischen links der Laufzeit können Sie am Ende mit malloc/free-mismatch-Probleme.

Sie können die DLLs mit der ausführbaren Datei ohne kompilieren in die .exe-Datei, und ohne Sie läuft der redist-tool - das ist, was ich Tue, und es scheint gut zu funktionieren.

Die einzige fliege in der Salbe ist, dass Sie brauchen, um die Dateien zweimal, wenn Sie die Verteilung für eine Vielzahl von Windows-Versionen - neuere OSs, müssen die Dateien im manifest definierten Verzeichnisse und ältere möchten, dass alle Dateien in das Programm-Verzeichnis.

Würden Sie suchen, um die statische Verknüpfung (im Gegensatz zu dynamisch link)

Ich bin mir nicht sicher, wie viele der MS-redistributables statisch link.

Wenn Sie schauen, um herauszufinden, welche dll ist Ihr Ziel-Maschine fehlt, dann verwenden depends.exe das zu kommen, mit MSDev, aber kann auch gefunden werden hier.Testen Sie dies auf ein paar target-Maschinen sollte Ihnen sagen, welche dll ' s, die Sie brauchen, um-Paket mit der Anwendung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top