Ich habe ein einfaches Programm in C ++ mit Code :: Blocks erstellt.
Wenn ich es über Code :: Blocks ausführe, funktioniert es ordnungsgemäß. Wenn ich es jedoch durch Doppelklicken auf die ausführbare Datei ausführe, wird ein Fenster mit der folgenden Meldung angezeigt:
Das Programm kann nicht gestartet werden, da libgcc_s_dw2-1.dll auf Ihrem Computer fehlt.
Versuchen Sie, das Programm neu zu installieren, um dieses Problem zu beheben.
Was ist also das Problem? Was muss ich tun, um das Problem zu beheben?
In Eclipse finden Sie es unter den Projekteigenschaften> C / C ++ Build> Einstellungen> MinGW C ++ Linker> Sonstiges
Sie müssen es zu den "Linker-Flags" oben hinzufügen. nirgendwo sonst. Dann einfach wieder aufbauen.
Ich habe festgestellt, dass das Verknüpfen dieser statisch die Größe selbst bei Optimierungen auf bis zu 1.400 KB explodiert. Es ist 277 KB größer als nur das Kopieren über die gemeinsam genutzten DLLs. Es ist auch 388kb größer, nachdem alles UPXing. Sehr verlieren / verlieren hier. Fügen Sie einfach die DLLs hinzu, da der Endbenutzer entscheiden kann, ob er sie löschen möchte oder nicht, wenn er sie an anderer Stelle installiert hat.
quelle
Code :: Blocks: Fügen Sie '-static' in den Einstellungen-> Compiler-> Linker-Einstellungen-> Andere Linker-Optionen hinzu.
quelle
Suchen Sie diese DLL auf Ihrem PC und kopieren Sie sie in dasselbe Verzeichnis, in dem sich Ihre ausführbare Datei befindet.
quelle
Siehe auch . Es hat mein Problem gelöst.
Übrigens, ist es definitiv
compiler
Flagge? Vielleichtlinker
ist der passendere Begriff hier?quelle
Kopieren Sie "libgcc_s_dw2-1.dll" in die Datei make.exe. (Wenn Sie Msys verwenden, kopieren Sie es nach \ msys \ bin.) Stellen Sie sicher, dass der Pfad zu make.exe in der Umgebung festgelegt ist. PATH (wenn sich make.exe höchstwahrscheinlich in einem Ordner "bin" befindet und Sie msys haben, ist es \ msys \ bin) Kompilieren, runden, debuggen usw. glücklich.
quelle
Wechseln Sie zum Baum MinGW http sourceforge.net. Unter Home / MinGW / Base / gcc / Version4 (oder welcher Version auch immer) / gcc-4 (Version) / finden Sie eine Datei wie gcc-core-4.8.1-4-mingw32-dll.tar.lzma . Extrahieren 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.
quelle
Ich konnte dies überwinden, indem ich "gcc" anstelle von "g ++" für meinen Compiler verwendete. Ich weiß, dass dies für die meisten Menschen keine Option ist, dachte aber, ich würde es als Problemumgehungsoption erwähnen :)
quelle
Können Sie es nicht in system32 oder so etwas wie mit anderen DLL-Dateien einfügen, damit nicht jedes Programm, das Sie ausführen möchten, dieses Problem auf Ihrem Computer hat?
Ich brauche nur den Weg, wo ich es hinstellen soll.
Es ist irgendwie ärgerlich, es jedes Mal in das Verzeichnis zu stellen, wenn ich ein Programm starte, das ich gerade erstellt habe ...
Edit: Ich habe die Lösung gefunden:
quelle
Gehen Sie einfach zu Einstellungen >> Compiler und Debugger, klicken Sie 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, um dieses Problem zu lösen, habe ich auch nach einer Lösung gesucht, und derjenige, der über "-static-libgcc -static-libstdc ++" gepostet hat, hat die richtige Idee und Ich habe den Rest aus Versehen herausgefunden, aber es hat funktioniert. Die Datei kann jetzt von außerhalb von Code :: Blocks angeklickt werden und funktioniert direkt vom Desktop aus.
quelle
Fügen Sie der Umgebungsvariablen PATH einen Pfad zu dieser DLL hinzu.
quelle
Einschließlich -static-libgcc auf der Kompilierung Linie, löst das Problem
Laut: @hardmath
Sie können auch einen Alias in Ihrem Profil [.profile] erstellen, wenn Sie beispielsweise MSYS2 verwenden
Jetzt geht auch dein GCC-Befehl durch ;-)
quelle
Das Hinzufügen von "-static" zu anderen Linkeroptionen löst dieses Problem. Ich hatte nur das gleiche Problem, nachdem ich dies auf einem anderen System getestet hatte, aber nicht auf meinem eigenen. 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 der DLL in denselben Ordner wie die ausführbare Datei ist keine Lösung, da sie die Idee der statischen Verknüpfung zunichte macht.
Eine andere Möglichkeit ist die Verwendung der TDM-Version von MinGW, die dieses Problem löst.
Update bearbeiten: Dies löst das Problem möglicherweise nicht für alle. Ein weiterer Grund, den ich kürzlich dafür entdeckt habe, ist die Verwendung einer von jemand anderem kompilierten Bibliothek. In meinem Fall wurde SFML nicht ordnungsgemäß kompiliert und erforderte daher eine DLL, die nicht vorhanden war, da sie mit einer anderen Version von MinGW kompiliert wurde als ich verwenden. Ich benutze einen Zwergen-Build, dieser hat einen anderen verwendet, also hatte ich die DLL nirgendwo und natürlich wollte ich sie nicht, da es sich um einen statischen Build handelte. Die Lösung kann darin bestehen, einen anderen Build der Bibliothek zu finden oder ihn selbst zu erstellen.
quelle
Bei der Arbeit mit msys2 ist beim Versuch, die Release-Version meines Projekts in einer Debug-Umgebung auszuführen, derselbe Fehler aufgetreten. Die Lösung für mein Problem liegt auf der Hand: Verwenden Sie eine ausführbare Datei mit Debug-Symbolen.
quelle
In CodeBlocks können Sie zu Einstellungen ... Compiler ... gehen und entweder 1) die beiden Elemente im blauen Feld oder 2) das eine Element im grünen Feld auswählen
quelle
Wenn Sie sich fragen, wo Sie die gemeinsam genutzte Bibliothek herunterladen können (obwohl dies auf den Geräten Ihres Clients nur funktioniert, wenn Sie die DLL angeben), finden Sie hier den Link: https://de.osdn.net/projects/mingw/downloads/72215/ libgcc-9.2.0-1-mingw32-dll-1.tar.xz /
quelle