运行用C编写的程序时“找不到Cygwin1.dll”。如何让Windows找到它?

时间:2008-12-03 19:20:04

标签: c eclipse

所以我正在尝试运行我用C编写的第一个hello world编程。我在eclipse中编译它并且没有错误,但是当我尝试运行它时,我得到:

“此应用程序无法启动,因为找不到cygwin1.dll。”

我发现this post似乎表明我应该将其添加到Windows PATH,我使用this来做到这一点。所以现在我的环境变量中的“Path”已经附加了“; C:\ cygwin \ bin \ cygwin1.dll”。仍然没有工作。任何人都知道我可能做错了什么?我的'程序'看起来像这样:

#include <stdio.h>

main()
{
    printf("hello, world\n");
}

4 个答案:

答案 0 :(得分:17)

PATH环境变量需要包含包含cygwin1.dll的目录,而不是cygwin1.dll本身的路径。所以只需确保PATH中包含字符串"C:\cygwin\bin"

答案 1 :(得分:15)

顺便说一下,我恳求你不要盲目地将包含cygwin1.dll的目录添加到系统PATH中。顺序搜索路径。如果你碰巧在路径中有较旧或较新版本的Cygwin运行时,那么与cygwin1.dll相关联的其他程序可能会崩溃(除非你知道你正在寻找不同的DLL版本,否则找出发生的事情并非易事。 。)

你应该做的是将cygwin1.dll(以及你的程序可能需要的其他Cygwin DLL)复制到保存二进制文件的目录中,然后创建一个空的(零字节长度)文件,其名称与可执行文件相同,但是{{{附加1}},即,如果您的可执行文件是.local,则创建名为mytest.exe的文件。这将告诉PE加载器首先在保存二进制文件的同一目录中查找所需的DLL,从而避免以后出现很多麻烦。

答案 2 :(得分:0)

我遇到了同样的问题...... Adam Rosenfield的回答很好解决了。在我的电脑上,路径必须是"C:\cygwin64\bin"

我第一次没有认识到我的cygwin版本是64位...但它很清楚,路径变量中的这些微小差异决定了它是否有效。

答案 3 :(得分:0)

添加: ;C\cygwin64\bin 到Windows 系统 PATH变量的 end

此外,要编译以在 CMD PowerShell 中使用,您可能需要使用:

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

(这将调用交叉编译器(如果已安装)。)