Het programma kan niet starten omdat libgcc_s_dw2-1.dll ontbreekt

Ik heb een eenvoudig programma in C++ gemaakt met Code::Blocks.

Als ik het uitvoer vanuit Code::Blocks, werkt het correct; maar als ik het uitvoer door te dubbelklikken op het uitvoerbare bestand, verschijnt er een venster met dit bericht:

Het programma kan niet starten omdat libgcc_s_dw2-1.dll op uw computer ontbreekt.
Probeer het programma opnieuw te installeren om dit probleem op te lossen.

Dus, wat is het probleem? Wat moet ik doen om het te repareren?


Antwoord 1, autoriteit 100%

Ik geloof dat dit een MinGW/gcc-compilerprobleem is, in plaats van een Microsoft Visual Studio-installatie.

De libgcc_s_dw2-1.dllzou in de bin-directory van de compiler moeten staan. U kunt deze map toevoegen aan uw PATH-omgevingsvariabele voor runtime-koppeling, of u kunt het probleem vermijden door “-static-libgcc -static-libstdc++” toe te voegen aan uw compilervlaggen.

Als u van plan bent het uitvoerbare bestand te distribueren, is het laatste waarschijnlijk het meest logisch. Als u van plan bent het alleen op uw eigen computer uit te voeren, is het wijzigen van de PATH-omgevingsvariabele een aantrekkelijke optie (houdt de grootte van het uitvoerbare bestand beperkt).

Bijgewerkt:

Op basis van feedback van Greg Treleaven (zie opmerkingen hieronder), voeg ik links toe naar:

[Screenshot van code::Blocks “Project build options”]

[GNU gcc-linkopties]

De laatste discussie omvat -static-libgccen -static-libstdc++linker-opties.


Antwoord 2, autoriteit 17%

In Eclipse vindt u het onder de projecteigenschappen > C/C++ Bouwen > Instellingen > MinGW C++ Linker > Diversen

Je moet het toevoegen aan de “linker-vlaggen” bovenaan; nergens anders.
Daarna gewoon opnieuw opbouwen.

Ik heb ontdekt dat het statisch koppelen van deze de grootte tot 1400 kb doet toenemen, zelfs met optimalisaties. Het is 277 kb groter in vergelijking met alleen kopiëren over de gedeelde DLL’s. Het is ook 388 kb groter nadat alles is ge-UPXing. Zeer verliezen/verliezen hier. Voeg gewoon de DLL’s toe, aangezien de eindgebruiker kan beslissen om ze al dan niet te verwijderen als ze ze ergens anders hebben geïnstalleerd.


Antwoord 3, autoriteit 6%

Code::Blocks: voeg ‘-static’ toe aan settings->compiler->Linker settings->Other linker options.


Antwoord 4, autoriteit 3%

Zie ook. Het heeft mijn probleem opgelost.

Trouwens, is het zeker de compilervlag? Misschien is linkerhier de meest geschikte term?


Antwoord 5, autoriteit 3%

Zoek die dll op uw pc en kopieer deze naar dezelfde map waarin uw uitvoerbare bestand zich bevindt.


Antwoord 6, autoriteit 2%

Kopieer “libgcc_s_dw2-1.dll” naar were make.exe is.
(Als je Msys gebruikt, kopieer het dan naar \msys\bin)
Zorg ervoor dat het pad naar make.exe is ingesteld in de env. PAD
(als make.exe in een map “bin” staat, en je hebt msys, dan is het \msys\bin)
Compileren, uitvoeren, debuggen, etc. gelukkig.


Antwoord 7, autoriteit 2%

Ga naar de MinGW http sourceforge.net-boom. Onder Home/MinGW/Base/gcc/Version4(of welke versie u ook gebruikt)/gcc-4(version)/ vindt u een bestand zoals gcc-core-4.8.1-4-mingw32-dll.tar.lzma . Pak het uit en ga naar de bin-map waar je je libgcc_s_dw2-1.dll en andere dll’s zult vinden. Kopieer en plak wat je nodig hebt in je bin-map.


Antwoord 8, autoriteit 2%

Ik was in staat om dit te overwinnen door “GCC” te gebruiken in plaats van “G ++” voor mijn compiler. Ik weet dat dit voor de meeste mensen geen optie is, maar dacht dat ik het als een optie Werkaround zou noemen 🙂


Antwoord 9, Autoriteit 2%

Zie je het niet in System32 of zoiets als jij met anderen DLL-bestanden, zodat elk programma dat je probeert te rennen, niet dat probleem op je machine zal hebben?

Ik heb gewoon het pad nodig waar je het moet plaatsen.

Het is een beetje vervelend om het elke keer in de map te zetten. Elke keer dat ik een programma run, heb ik net gebouwd …

EDIT: Ik heb de oplossing gevonden:

Extract libgcc_s_dw2-1.dll naar een locatie op uw computer. We
Beveel je aan om het uit te zetten in de map van het programma dat is
aanvragen van libgcc_s_dw2-1.dll.

Als dat niet werkt, moet je libgcc_s_dw2-1.dll uitpakken
uw systeemmap. Standaard is dit:

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

Als u een 64-bits versie van Windows gebruikt, moet u ook plaatsvinden
libgcc_s_dw2-1.dll in c: \ windows \ syswow64 \

Zorg ervoor dat alle bestaande bestanden overschrijven (maar maak een back-up-kopie van de
origineel bestand). Start uw computer opnieuw op.

Als het probleem nog steeds optreedt, probeert u het volgende:

  • Open Windows Start Menu en selecteer “Run …”.
  • Typ CMD en druk op ENTER (of als u Windows Me, Typ Command)) gebruikt).
  • TYPE REGSVR32 LIBGCC_S_DW2-1.DLL en druk op ENTER.

Antwoord 10, Autoriteit 2%

Ga gewoon naar Instellingen>>Compiler en Debugger, klik vervolgens op het tabblad Linker-instellingen en ga naar het besturingselement “Andere linkeropties” en plak: “-static-libgcc -static-libstdc++” erop, er is geen compilervlagoptie in de Compiler Flags-opties voor Code::Blocks dus dat is de manier om dat probleem op te lossen, ik kwam hier ook op zoek naar een oplossing en de enige die postte over “-static-libgcc -static-libstdc++” gaf de goed idee, en ik bedacht de rest min of meer per ongeluk, maar het werkte, het bestand is nu klikbaar van buiten Code::Blocks, werkt rechtstreeks vanaf het bureaublad.


Antwoord 11

Voeg pad naar die dll toe aan PATH-omgevingsvariabele.


Antwoord 12

Als je je afvraagt waar je de gedeelde bibliotheek kunt downloaden (hoewel dit niet werkt op de apparaten van je klant tenzij je de dll opneemt), is hier de link: https://de.osdn.net/projects/mingw/downloads/ 72215/libgcc-9.2.0-1-mingw32-dll-1.tar.xz/


Antwoord 13

Het opnemen van -static-libgccop de compileerregel lost het probleem op

g++ my.cpp -o my.exe -static-libgcc

Volgens: @hardmath

U kunt ook een aliasmaken op uw profiel [ .profile ]als u bijvoorbeeld MSYS2 gebruikt

alias g++="g++ -static-libgcc"

Nu gaat je GCC-commando ook door 😉

Vergeet niet om uw Terminal opnieuw op te starten


Antwoord 14

In CodeBlocks kun je naar Instellingen…Compiler…
en kies een van beide
1) de twee items in de blauwe doos
of
2) het enige item in het groene vak


Antwoord 15

Het toevoegen van “-static” aan andere linker-opties lost dit probleem op. Ik had net hetzelfde probleem nadat ik dit op een ander systeem had getest, maar niet alleen, dus zelfs als je dit niet hebt opgemerkt op je ontwikkelsysteem, moet je controleren of je deze set hebt als je statisch linkt.

Nog een opmerking: het kopiëren van de DLL naar dezelfde map als het uitvoerbare bestand is geen oplossing, omdat het het idee van statisch koppelen verslaat.

Een andere optie is om de TDM-versie van MinGW te gebruiken die dit probleem oplost.

Update-edit: dit lost het probleem mogelijk niet voor iedereen op. Een andere reden die ik hier onlangs voor ontdekte, is wanneer je een bibliotheek gebruikt die door iemand anders is gecompileerd, in mijn geval was het SFML die niet goed was gecompileerd en dus een DLL nodig had die niet bestond omdat deze was gecompileerd met een andere versie van MinGW dan wat ik gebruik maken van. Ik gebruik een dwerg-build, deze gebruikte een andere, dus ik had de DLL nergens en natuurlijk wilde ik het niet omdat het een statische build was. De oplossing kan zijn om een andere build van de bibliotheek te vinden, of deze zelf te bouwen.


Antwoord 16

Werken met msys2 Ik heb dezelfde foutmelding gekregen bij het uitvoeren van de releaseversie van mijn project in een foutopsporingsomgeving. De oplossing voor mijn probleem ligt voor de hand: gebruik een uitvoerbaar bestand met debug-symbolen.


Antwoord 17

Stap 1:Stel de vlaggen -static-libgccen -static-libstdc++in, of stel de -staticvlag onder settings -> compiler -> global compiler settings | Compiler settings | Compiler Flags

Stap 2 (niet benadrukt in de andere antwoorden):Maakje build schoon voordat je gaat bouwen en uitvoeren. Zonder opschonen zou je kunnen denken dat je het project opnieuw opbouwt, maar je zult eindigen met dezelfde .exe. Opschonen zal, onder andere, de bestanden in de binen objmap verwijderen, zodat er bij het bouwen een nieuwe set bestanden wordt aangemaakt in binen objmap.

Other episodes