189 votes

Le programme ne peut pas démarrer car il manque libgcc_s_dw2-1.dll.

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

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

Le programme ne peut pas démarrer car il manque libgcc_s_dw2-1.dll sur 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ésoudre ?

214voto

hardmath Points 5346

Je pense que c'est un problème de compilateur MinGW/gcc, plutôt qu'une configuration de Microsoft Visual Studio.

El libgcc_s_dw2-1.dll doit se trouver dans le répertoire bin du compilateur. Vous pouvez ajouter ce répertoire à votre variable d'environnement PATH pour la liaison d'exécution, ou vous pouvez éviter le problème en ajoutant "-static-libgcc -static-libstdc++" à vos drapeaux de compilateur.

Si vous envisagez de distribuer l'exécutable, cette dernière solution est probablement la plus judicieuse. Si vous ne prévoyez de l'exécuter que sur votre propre machine, la modification de la variable d'environnement PATH est une option intéressante (elle permet de réduire la taille de l'exécutable).

Mis à jour :

Suite aux réactions de Greg Treleaven (voir les commentaires ci-dessous), j'ajoute des liens vers :

[Capture d'écran de Code::Blocks "Project build options"]

[Options de liaison de GNU gcc]

Cette dernière discussion comprend -static-libgcc y -static-libstdc++ options de liaison.

0 votes

J'ai le même problème que @xRobot, et je n'ai pas trouvé d'endroit pour ajouter des choses aux drapeaux du compilateur, alors j'ai essayé de les ajouter à Autres options, puis à Options du linker, et le message d'erreur s'est encore produit. Y a-t-il un problème avec ce que je fais ?

0 votes

@Greg Treleaven : Pour plus de clarté, vous construisez un exécutable avec Code::Block, il fonctionne comme prévu dans l'IDE mais signale une erreur "can't start because libgcc_s_dw2-1.dll is missing" lorsque vous essayez de l'exécuter en dehors de l'IDE. Vous avez vérifié le répertoire bin du compilateur, et oui, cette DLL s'y trouve bien. Vous essayez de résoudre le problème en effectuant une liaison statique, qui extrait le code compilé d'une bibliothèque afin que la DLL (liaison d'exécution) ne soit pas nécessaire, mais cela ne fonctionne pas. Deux suggestions : Faites une compilation propre (la modification des options peut ne pas déclencher une reconstruction) et essayez d'ajouter la variable PATH.

0 votes

@hardmath : Cela ne fonctionne toujours pas après avoir fait une reconstruction propre, donc je suppose que je vais devoir utiliser l'une des autres façons de résoudre ce problème. Merci de votre aide.

36voto

TommyTom Points 171

Dans Eclipse, vous le trouverez dans les propriétés du projet > C/C++ Build > Settings > MinGW C++ Linker > Misc.

Vous devez l'ajouter aux "drapeaux de linker" en haut ; nulle part ailleurs. Ensuite, il suffit de reconstruire.

Eclipse properties screenshot

J'ai constaté que le fait de les lier de manière statique fait exploser la taille jusqu'à 1 400 kb, même avec des optimisations. C'est 277kb de plus par rapport à la simple copie des DLLs partagées. C'est aussi 388kb plus gros après avoir tout UPXé. C'est très perdant/perdant ici. Il suffit d'inclure les DLL car l'utilisateur final peut décider de les supprimer ou non s'il les a installées ailleurs.

1 votes

Existe-t-il un moyen d'éviter d'ajouter l'indicateur de liaison dans chaque projet nouvellement créé ?

0 votes

Aux lecteurs : Veuillez noter les options ajoutées dans l'image. Cela fonctionne. Cela sert de référence : orfe.princeton.edu/help/article-296

7voto

Dave Points 2705

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

0 votes

Pourquoi cela ne se produit-il pas avec Visual Studio ?

1 votes

Il le fait aussi, mais avec d'autres dlls. Par exemple, s'il vous manque la dll msvcrt90.dll, votre projet visual compilé ne démarrera pas (elle est généralement installée dans tout le système).

4voto

yossi Points 31

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

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 construire...

Edit : J'ai trouvé la solution :

Extrayez libgcc_s_dw2-1.dll vers un emplacement de votre ordinateur. Nous recommandons de le décompresser dans le répertoire du programme qui demande qui demande libgcc_s_dw2-1.dll.

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

  • 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-bit de Windows, vous devez également placer libgcc_s_dw2-1.dll dans le fichier C:\Windows\SysWOW64\

Assurez-vous d'écraser tous les fichiers existants (mais faites une copie de sauvegarde du fichier 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 et appuyez sur Entrée (ou si vous utilisez Windows ME, tapez COMMAND)).
  • Tapez regsvr32 libgcc_s_dw2-1.dll et appuyez sur Entrée.

12 votes

Veuillez ne pas publier de commentaires comme réponses ici. Ce n'est pas comme ça que Stack Overflow fonctionne. Vous n'irez pas loin non plus en utilisant "u" au lieu de "you" et "cos" au lieu de "because". Le langage de bavardage est spécifiquement interdit ici.

3voto

Bojan Komazec Points 4248

Ajoutez le chemin vers cette dll dans la variable d'environnement PATH.

0 votes

Pourquoi cela ne se produit-il pas avec Visual Studio ?

0 votes

Probablement parce que le chemin d'accès à cette dll est répertorié dans Outils-> Options->Projets et Solutions -> Répertoires VC++ -> Fichiers exécutables de VisualStudio. VisualStudio regarde ici et dans la variable d'environnement PATH lorsqu'il recherche les chemins vers les dlls.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X