程序无法启动,因为缺少cygwin1.dll... 在Eclipse CDT中。

53

我已经在电脑上安装了几年的Eclipse for Java,并决定安装CDT并学习C。我同时安装了MinGW和Cygwin,当我创建新项目时,CDT会检测它们并尝试使用它们。

我选择File > New C++ Project并选择Hello World C++ ProjectCygwinGCC工具链。我将项目命名为"asdf",然后点击工具栏中的"Build Debug"。编译器完成时没有错误。我点击运行,但没有任何反应。

手动浏览到项目目录并运行asdf.exe时,出现以下错误:
"The program can't start because cygwin1.dll is missing from your computer. Try reinstalling the program to fix this problem."

使用MinGW也出现相同的问题,只是缺少的dll不同。
我需要做些什么才能得到可用的.exe文件呢?
(我正在运行Windows 7 x64和最新版本的Eclipse和CDT。)

编辑: 编译器输出如下:

**** 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
3个回答

84
这个错误信息意味着Windows无法找到"cygwin1.dll"。Cygwin gcc创建的程序依赖于该DLL文件。该文件是Cygwin的一部分,所以很可能位于C:\cygwin\bin。要解决这个问题,您只需要将C:\cygwin\bin(或者能够找到cygwin1.dll文件的位置)添加到系统路径中。或者也可以将cygwin1.dll复制到Windows目录中。
有一个很好用的工具叫做DependencyWalker,可以从http://www.dependencywalker.com下载。您可以使用它来检查可执行文件的依赖项,因此如果您检查生成的程序,它会告诉您哪些依赖项缺失,哪些已解决。

2
我应该补充的是,您可以将DLL文件复制到与exe相同的目录中。通常由VisualStudio构建的exe也具有依赖性,例如对MSVCR71.DLL的依赖。 - phlogratos
2
@Marco:为什么不将C:\cygwin64\bin添加到系统路径中呢?我猜你的二进制文件是编译成了64位的。 - phlogratos
2
@phlogratos,我输错了,在最后一个文件夹前忘记加“;”,并且输入了“C:cygwin64\bin”。问题现在已经解决。 - Jossie Calderon
5
如果一个程序需要cygwin1.dll,那是否意味着它也需要安装cygwin?还是只要有dll文件存在就可以在任何计算机上运行? - Steve W
1
对我来说,将 cygwin1.dll 添加到 C:\windows 目录中就可以了。 - ako
显示剩余7条评论

2
您可以使用Cygwin的g++或MinGW(通过独立安装或使用Cygwin包)进行编译。 然而,为了运行它,您需要在任何Cygwin样式路径之前将Cygwin1.dll(和其他文件)路径添加到系统Windows PATH中。
因此,请将;C:\cygwin64\bin添加到Windows 系统 PATH变量的末尾
另外,为了在CMDPowerShell中编译使用,您可能需要使用:
x86_64-w64-mingw32-g++.exe -static -std=c++11 prog_name.cc -o prog_name.exe

(如果已安装,则调用交叉编译器。)

1
非常感谢您的帮助@not2qubit。但是您忘记在“;C \ cygwin64 \ bin”字符串中的“C”后面放置冒号了。我认为最好编辑您的答案。因为我一开始有点困惑。祝一切顺利... - SANN
嗨@SANN,我已经修复了。谢谢。 - not2qubit

0

为了补充这一点并帮助其他人节省谷歌搜索的时间,只需在命令提示符中执行以下操作:

set PATH=%PATH%;C:\cygwin64\bin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接