web-dev-qa-db-fra.com

Le programme ne peut pas démarrer car cygwin1.dll est manquant ... dans Eclipse CDT

J'ai eu Eclipse pendant Java sur mon ordinateur pendant quelques années, et j'ai décidé d'installer le CDT et d'apprendre C. J'ai installé à la fois MinGW et Cygwin et le CDT les détecte et essaie de les utiliser lorsque je crée un nouveau projet.

Je choisis File > New C++ Project et choisissez Hello World C++ Project et la chaîne d'outils CygwinGCC. Je nomme le projet "asdf" et je clique sur "Build Debug" dans la barre d'outils. Le compilateur se termine sans erreur. J'ai frappé Run et rien ne se passe.

Parcourir le répertoire du projet manuellement et exécuter asdf.exe me donne une erreur disant:
"The program can't start because cygwin1.dll is missing from your computer. Try reinstalling the program to fix this problem."

La même chose se produit avec MinGW, seule une DLL différente est manquante.
Que dois-je faire pour avoir un .exe utilisable?
(J'utilise Windows 7 x64 et la dernière version d'Eclipse et du CDT.)

EDIT: La sortie du compilateur est la suivante:

**** Build of configuration Debug for project asdf ****

make all 
Building file: ../src/asdf.cpp
Invoking: Cygwin C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/asdf.d" -MT"src/asdf.d" -o"src/asdf.o" "../src/asdf.cpp"
cygwin warning:
  MS-DOS style path detected: C:\Users\Shawn\Dropbox\Eclipse\asdf\Debug
  Preferred POSIX equivalent is: /cygdrive/c/Users/Shawn/Dropbox/Eclipse/asdf/Debug
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Finished building: ../src/asdf.cpp

Building target: asdf.exe
Invoking: Cygwin C++ Linker
g++  -o"asdf.exe"  ./src/asdf.o   
Finished building target: asdf.exe
36
Shawn Walton

Ce message d'erreur signifie que Windows n'est pas en mesure de trouver "cygwin1.dll". Les programmes créés par Cygwin gcc dépendent de cette DLL. Le fichier fait partie de cygwin, il est donc très probable qu'il se trouve dans C:\cygwin\bin. Pour résoudre le problème, il vous suffit d'ajouter C:\cygwin\bin (ou l'emplacement où se trouve cygwin1.dll) à votre chemin système. Vous pouvez également copier cygwin1.dll dans votre répertoire Windows.

Il existe un bel outil appelé DependencyWalker que vous pouvez télécharger à partir de http://www.dependencywalker.com . Vous pouvez l'utiliser pour vérifier les dépendances des exécutables, donc si vous inspectez votre programme généré, il vous indique quelles dépendances sont manquantes et lesquelles sont résolues.

66
phlogratos

Vous pouvez compiler avec g++ Ou MinGW de Cygwin (via autonome ou en utilisant le package Cygwin). Cependant, pour l'exécuter, vous devez ajouter le CHEMIN Cygwin1.dll (Et autres) au CHEMIN système Windows, avant tout chemin de style cygwin.

Ajoutez donc: ;C\cygwin64\bin au fin de votre système Windows PATH variable.

De plus, pour compiler pour une utilisation dans CMD ou PowerShell, vous devrez peut-être utiliser:

x86_64-w64-mingw32-g++.exe -static -std=c++11 prog_name.cc -o prog_name.exe

(Cela appelle le compilateur croisé, s'il est installé.)

1
not2qubit