it-swarm.com.de

Das Programm kann nicht starten, da libgcc_s_dw2-1.dll fehlt

Ich habe in C++ ein einfaches Programm mit Code :: Blocks erstellt.

Wenn ich es von Code :: Blocks aus laufe, funktioniert es korrekt. Wenn ich es jedoch durch Doppelklick auf die ausführbare Datei starte, erscheint ein Fenster mit folgender Meldung:

Das Programm kann nicht starten, da libgcc_s_dw2-1.dll auf Ihrem Computer fehlt.
Versuchen Sie, das Programm erneut zu installieren, um dieses Problem zu beheben.

Was ist also das Problem? Was muss ich tun, um das Problem zu beheben?

153
xRobot

Ich glaube, dass dies ein MinGW/gcc-Compiler-Problem ist, und nicht ein Microsoft Visual Studio-Setup.

Der libgcc_s_dw2-1.dll sollte sich im bin-Verzeichnis des Compilers befinden. Sie können dieses Verzeichnis Ihrer PATH-Umgebungsvariablen für die Laufzeitverknüpfung hinzufügen oder das Problem vermeiden, indem Sie den Compiler-Flags "-static-libgcc -static-libstdc ++" hinzufügen.

Wenn Sie die ausführbare Datei verteilen möchten, ist die letztere wahrscheinlich am sinnvollsten. Wenn Sie nur planen, es auf Ihrem eigenen Computer auszuführen, ist das Ändern der Umgebungsvariable PATH eine attraktive Option (reduziert die Größe der ausführbaren Datei).

Aktualisierte:

Basierend auf dem Feedback von Greg Treleaven (siehe Kommentare unten), füge ich Links hinzu:

[Screenshot von Code :: Blocks "Projekterstellungsoptionen"]

[GNU gcc link options]

Die letztere Diskussion enthält die Optionen -static-libgcc und -static-libstdc++ linker.

180
hardmath

In Eclipse finden Sie es unter den Projekteigenschaften> C/C++ Build> Einstellungen> MinGW C++ Linker> Misc

Sie müssen es den "Linker-Flags" oben hinzufügen. nirgendwo sonst ... __ dann einfach wieder aufbauen.

Eclipse properties screenshot

Ich habe festgestellt, dass die Verknüpfung dieser statischen Elemente selbst bei Optimierungen eine Größe von bis zu 1.400 kb aufweist. Es ist 277 KB größer als das Kopieren über die gemeinsam genutzten DLLs. Nach dem UPXing ist alles um 388 kb größer. Sehr verlieren/verlieren hier. Fügen Sie einfach die DLLs hinzu, da der Endbenutzer entscheiden kann, sie zu löschen, oder nicht, wenn sie an anderer Stelle installiert sind.

36
TommyTom

Code :: Blocks: Fügen Sie "-static" in Einstellungen-> Compiler-> Linker-Einstellungen-> Andere Linker-Optionen hinzu.

8
user1826947

Suchen Sie diese DLL auf Ihrem PC und kopieren Sie sie in dasselbe Verzeichnis, in dem sich Ihre ausführbare Datei befindet.

5
Dave

Kopieren Sie "libgcc_s_dw2-1.dll" in were make.exe: . (Wenn Sie Msys verwenden, kopieren Sie es in\msys\bin.) Stellen Sie sicher, dass der Pfad zu make.exe in der Umgebung festgelegt ist. PFAD (Wenn sich make.exe in einem Ordner "bin" befindet, höchstwahrscheinlich und Sie haben msys, ist es\msys\bin.).

5
Blizz

Können Sie es nicht in system32 oder etwas, das Sie mit anderen DLL-Dateien tun, einsetzen, so dass jedes Programm, das Sie ausführen möchten, dieses Problem nicht auf Ihrem Computer hat?

Ich brauche nur den Weg, wo ich ihn hinlegen soll.

Es ist irgendwie ärgerlich, es jedes Mal, wenn ich ein gerade ausgeführtes Programm starte, in das Verzeichnis zu setzen ...

Edit: Ich habe die Lösung gefunden:

Extrahieren Sie libgcc_s_dw2-1.dll an einem Speicherort auf Ihrem Computer. Wir Sie sollten es in das Verzeichnis des Programms entpacken, das .__ ist. libgcc_s_dw2-1.dll wird angefordert.

Wenn das nicht funktioniert, müssen Sie libgcc_s_dw2-1.dll nach .__ extrahieren. Ihr Systemverzeichnis. Standardmäßig ist dies:

  • C:\Windows\System (Windows 95/98/Me) 
  • C:\WINNT\System32 (Windows NT/2000) 
  • C:\Windows\System32 (Windows XP, Vista, 7) 

Wenn Sie eine 64-Bit-Version von Windows verwenden, sollten Sie auch .__ angeben. libgcc_s_dw2-1.dll in C:\Windows\SysWOW64 \

Stellen Sie sicher, dass vorhandene Dateien überschrieben werden (erstellen Sie jedoch eine Sicherungskopie der Originaldatei ). Starte deinen Computer neu.

Wenn das Problem weiterhin auftritt, versuchen Sie Folgendes:

  • Öffnen Sie das Windows-Startmenü und wählen Sie "Ausführen ...".
  • Geben Sie CMD ein und drücken Sie die Eingabetaste (oder wenn Sie Windows ME verwenden, geben Sie COMMAND ein).
  • Geben Sie regsvr32 libgcc_s_dw2-1.dll ein und drücken Sie die Eingabetaste.
4
yossi

Gehen Sie einfach zu Einstellungen >> Compiler und Debugger, klicken Sie dann auf die Registerkarte Linker-Einstellungen und wechseln Sie zum Bearbeitungssteuerelement "Andere Linker-Optionen", und fügen Sie Folgendes ein: "-static-libgcc -static-libstdc ++". Es gibt keine Compiler-Flag-Option In den Compiler-Flags-Optionen für Code :: Blocks ist dies der Weg, um dieses Problem zu lösen. Ich bin auch hier auf der Suche nach einer Lösung und derjenige, der über "-static-libgcc -static-libstdc ++" gepostet hat, gab die richtige Idee und Ich habe den Rest durch Zufall herausgefunden, aber es hat funktioniert, die Datei ist jetzt von außerhalb von Code :: Blocks anklickbar und funktioniert direkt vom Desktop aus.

4
Jack Offington

Siehe auch . Es hat mein Problem gelöst.

Ist es übrigens definitiv compiler flag? Vielleicht ist linker der geeignetere Begriff hier?

4
fat

Ich konnte das überwinden, indem ich für meinen Compiler "gcc" anstelle von "g ++" verwendete. Ich weiß, dass dies für die meisten Leute keine Option ist, aber ich dachte, ich würde es als Problemlösung erwähnen :)

4
rogerdpack

Fügen Sie der PATH-Umgebungsvariablen einen Pfad zu dieser DLL hinzu.

3
Bojan Komazec

Gehen Sie zum MinGW-http-Sourceforge.net-Baum. Unter Home/MinGW/Base/gcc/Version4 (oder welche Version auch immer verwendet wird)/gcc-4 (Version)/finden Sie eine Datei wie gcc-core-4.8.1-4-mingw32-dll.tar.lzma . Entpacken Sie es und gehen Sie in den Ordner bin, in dem Sie Ihre libgcc_s_dw2-1.dll und andere DLLs finden. Kopieren Sie das, was Sie benötigen, und fügen Sie es in Ihr bin-Verzeichnis ein.

3
user2074102

Durch Hinzufügen von "-static" zu anderen Linker-Optionen wird dieses Problem gelöst. Ich hatte gerade das gleiche Problem, nachdem ich dies auf einem anderen System getestet hatte, aber nicht von mir selbst. Wenn Sie dies auf Ihrem Entwicklungssystem nicht bemerkt haben, sollten Sie überprüfen, ob Sie dieses Set haben, wenn Sie statisch verknüpfen.

Ein weiterer Hinweis: Das Kopieren von DLL in den gleichen Ordner wie die ausführbare Datei ist keine Lösung, da dies die Idee einer statischen Verknüpfung verhindert.

Eine andere Option ist die Verwendung der TDM-Version von MinGW, die dieses Problem löst.

1
Neil Roy

Bei der Arbeit mit msys2 habe ich dieselbe Fehlermeldung erhalten, als ich versuchte, die Release-Version meines Projekts in einer Debug-Umgebung auszuführen. Die Lösung für mein Problem liegt auf der Hand: Verwenden Sie eine ausführbare Datei mit Debug-Symbolen.

0
Rubén Pozo