web-dev-qa-db-fra.com

Le programme ne peut pas démarrer, car libgcc_s_dw2-1.dll est manquant

J'ai créé un programme simple en C++ avec Code :: Blocks.

Si je le lance à partir de Code :: Blocks, cela fonctionne correctement; mais si je l'exécute en double-cliquant sur le fichier exécutable, une fenêtre s'ouvre avec le message suivant:

Le programme ne peut pas démarrer, car libgcc_s_dw2-1.dll est absent de votre ordinateur.
Essayez de réinstaller le programme pour résoudre ce problème.

Alors quel est le problème? Que dois-je faire pour le réparer?

153
xRobot

Je crois que ceci est un problème de compilateur de MinGW/gcc, plutôt qu'une installation de Microsoft Visual Studio.

Le libgcc_s_dw2-1.dll devrait être dans le répertoire bin du compilateur. Vous pouvez ajouter ce répertoire à votre variable d'environnement PATH pour la liaison à l'exécution, ou vous pouvez éviter le problème en ajoutant "-static-libgcc -static-libstdc ++" à vos indicateurs de compilation.

Si vous envisagez de distribuer l'exécutable, c'est ce dernier qui a le plus de sens. Si vous envisagez uniquement de l'exécuter sur votre propre ordinateur, la modification de la variable d'environnement PATH est une option attrayante (conserve la taille de l'exécutable).

Mis à jour:

D'après les commentaires de Greg Treleaven (voir les commentaires ci-dessous), j'ajoute des liens vers:

[Capture d'écran de Code :: Blocks "Options de construction du projet"]

[Options de liens GNU gcc]

La dernière discussion inclut les options -static-libgcc et -static-libstdc++.

180
hardmath

Dans Eclipse, vous le trouverez dans les propriétés du projet> Construction C/C++> Paramètres> Éditeur de liens MinGW C++> Divers.

Vous devez l'ajouter aux "drapeaux de l'éditeur de liens" en haut; nulle part ailleurs ... alors reconstruisez.

Eclipse properties screenshot

J'ai constaté que la liaison de ceux-ci de manière statique fait exploser la taille jusqu'à 1 400 Ko, même avec des optimisations. Sa taille est 277 Ko supérieure à celle de la copie des DLL partagées. C'est 388kb plus grand aussi après tout UPXing. Très perdre/perdre ici. Incluez simplement les DLL car l'utilisateur final peut décider de les supprimer ou non s'il les a installées ailleurs.

36
TommyTom

Code :: Blocks: ajoute '-static' dans settings-> compiler-> Paramètres de l'éditeur de liens-> Autres options de l'éditeur de liens.

8
user1826947

Trouvez cette DLL sur votre PC et copiez-la dans le même répertoire que votre exécutable.

5
Dave

Copiez "libgcc_s_dw2-1.dll" dans le fichier make make is is . (Si vous utilisez Msys, copiez-le dans\msys\bin) Assurez-vous que le chemin d'accès à make.exe est défini dans env. CHEMIN (Si make.exe se trouve probablement dans un dossier "bin" et que vous avez msys, il s'agit de\msys\bin).

5
Blizz

Ne pouvez-vous pas le mettre dans system32 ou quelque chose comme vous le faites avec d'autres fichiers dll, afin que chaque programme que vous essayez d'exécuter n'ait pas ce problème sur votre ordinateur?

J'ai juste besoin du chemin où le mettre.

C'est un peu ennuyeux de le mettre dans le répertoire chaque fois que je lance un programme que je viens de créer ...

Edit: j'ai trouvé la solution:

Extrayez libgcc_s_dw2-1.dll dans un emplacement sur votre ordinateur. Nous vous recommande de le décompresser dans le répertoire du programme qui est demander libgcc_s_dw2-1.dll.

Si cela ne fonctionne pas, vous devrez extraire libgcc_s_dw2-1.dll dans votre répertoire système. Par défaut, c'est:

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

Si vous utilisez une version 64 bits de Windows, vous devez également placer libgcc_s_dw2-1.dll dans C:\Windows\SysWOW64 \

Assurez-vous d’écraser tous les fichiers existants (mais faites une copie de sauvegarde du fichier Original). Redémarrez votre ordinateur.

Si le problème persiste, essayez ce qui suit:

  • Ouvrez le menu Démarrer de Windows et sélectionnez "Exécuter ...".
  • Tapez CMD and press Enter (ou si vous avez Windows ME, tapez COMMAND)).
  • Tapez regsvr32 libgcc_s_dw2-1.dll et appuyez sur Entrée.
4
yossi

Allez simplement dans Paramètres >> Compilateur et débogueur, puis cliquez sur l'onglet Paramètres du lieur et allez dans le contrôle d'édition "Autres lieurs" et collez-le: "-static-libgcc -static-libstdc ++", il n'y a pas d'option indicateur de compilation dans les options du compilateur pour Code :: Blocks, c’est le moyen de résoudre ce problème. Je suis venu ici aussi à la recherche d’une solution. Le type qui a posté sur "-static-libgcc -static-libstdc ++" a donné la bonne idée, et J'ai en quelque sorte compris le reste par accident, mais cela a fonctionné, le fichier est cliquable depuis l'extérieur de Code :: Blocks, fonctionne directement à partir du bureau.

4
Jack Offington

Voir aussi . Cela a résolu mon problème.

Au fait, est-ce bien le drapeau compiler? Peut-être que linker est le terme le plus approprié ici?

4
fat

J'ai pu surmonter cela en utilisant "gcc" au lieu de "g ++" pour mon compilateur. Je sais que ce n'est pas une option pour la plupart des gens, mais je pensais que je le mentionnerais comme solution de rechange:

4
rogerdpack

Ajouter le chemin d'accès à cette DLL dans la variable d'environnement PATH.

3
Bojan Komazec

Accédez à l'arborescence http sourceforge.net de MinGW. Sous Home/MinGW/Base/gcc/Version4 (ou quelle que soit la version utilisée)/gcc-4 (version)/vous trouverez un fichier comme gcc-core-4.8.1-4-mingw32-dll.tar.lzma . Extrayez-le et allez dans le dossier bin où vous trouverez votre libgcc_s_dw2-1.dll et d'autres dll. Copiez et collez ce dont vous avez besoin dans votre répertoire bin.

3
user2074102

Ajouter "-static" à d'autres options de l'éditeur de liens résout ce problème. J'avais juste le même problème après l'avoir testé sur un autre système, mais pas tout seul. Par conséquent, même si vous ne le remarquiez pas sur votre système de développement, vous devriez vérifier que vous disposez de cet ensemble si vous créez un lien statique.

Autre remarque, copier la DLL dans le même dossier que l'exécutable n'est pas une solution, car cela élimine l'idée de la liaison statique.

Une autre option consiste à utiliser la version TDM de MinGW qui résout ce problème.

1
Neil Roy

En travaillant avec msys2, j'ai obtenu la même erreur en essayant d'exécuter la version finale de mon projet dans un environnement de débogage. La solution à mon problème est évidente: utilisez un exécutable avec des symboles de débogage.

0
Rubén Pozo