该程序可以';无法启动,因为缺少cygwin1.dll。。。在eclipsecdt中
几年来,我的计算机上安装了Eclipse for Java,并决定安装CDT和学习C。我安装了该程序可以';无法启动,因为缺少cygwin1.dll。。。在eclipsecdt中,eclipse,dll,cygwin,exe,eclipse-cdt,Eclipse,Dll,Cygwin,Exe,Eclipse Cdt,几年来,我的计算机上安装了Eclipse for Java,并决定安装CDT和学习C。我安装了MinGW和Cygwin,CDT在我创建新项目时检测并尝试使用它们 < >我选择文件>新建C++项目< /C> >选择 Hello World C++项目和 CygWiNccCC < /Cuth>工具链。我将项目命名为“asdf”,并在工具栏中点击“builddebug”。编译器完成时没有错误。我跑了,什么也没发生 手动浏览项目目录并运行asdf.exe时,会出现一个错误,提示: “该程序无法启动,因为
MinGW
和Cygwin
,CDT在我创建新项目时检测并尝试使用它们
< >我选择<代码>文件>新建C++项目< /C> >选择<代码> Hello World C++项目和“该程序无法启动,因为您的计算机缺少cygwin1.dll。请尝试重新安装该程序以解决此问题。”
使用MinGW也会发生同样的情况,只是缺少一个不同的dll。我需要做什么才能拥有一个可用的.exe?
(我正在运行Windows7x64以及最新版本的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
此错误消息表示Windows无法找到“cygwin1.dll”。Cygwin gcc创建的程序依赖于此DLL。该文件是cygwin的一部分,因此很可能位于C:\cygwin\bin中。要解决此问题,只需将C:\cygwin\bin(或可以找到cygwin1.dll的位置)添加到系统路径。或者,您可以将cygwin1.dll复制到Windows目录中
有一个很好的工具叫DependencyWalker,你可以从中下载。您可以使用它来检查可执行文件的依赖关系,因此,如果您检查生成的程序,它会告诉您哪些依赖关系缺失,哪些依赖关系已解决。您可以使用Cygwin的
g++
或MinGW(通过单机版或使用Cygwin包)进行编译。但是,为了运行它,您需要将Cygwin1.dll
(和其他)路径添加到系统窗口路径,然后再添加任何cygwin样式的路径
因此添加:;C:\cygwin64\bin
到Windows系统路径变量的端
此外,要编译以在CMD或PowerShell中使用,您可能需要使用:
x86_64-w64-mingw32-g++.exe -static -std=c++11 prog_name.cc -o prog_name.exe
(这将调用交叉编译器(如果已安装)。我应该补充的是,您可以将DLL复制到与exe相同的目录中。VisualStudio构建的EXE通常也具有依赖性,例如与MSVCR71的依赖性。DLL@Marco:为什么不将C:\cygwin64\bin
添加到系统路径中?我猜您的二进制代码是64位编译的。@phlogratos我输入的,忘了添加
在最后一个文件夹之前,并键入C:cygwin64\bin
。问题现在解决了。如果一个程序需要cygwin1.dll,这是否意味着它也需要cygwin安装?或者只要dll存在,它就可以在任何机器上运行?对我来说,它在将cygwin1.dll
添加到C:\windows
目录时起作用。非常感谢@not2qubit提供的帮助。但是你忘了把冒号放在“;C\cygwin64\bin'字符串,在'C'之后。我认为编辑你的答案会更好。因为一开始我有点困惑。最好的…嗨,桑,我已经修好了。谢谢