Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
该程序可以';无法启动,因为缺少cygwin1.dll。。。在eclipsecdt中_Eclipse_Dll_Cygwin_Exe_Eclipse Cdt - Fatal编程技术网

该程序可以';无法启动,因为缺少cygwin1.dll。。。在eclipsecdt中

该程序可以';无法启动,因为缺少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时,会出现一个错误,提示: “该程序无法启动,因为

几年来,我的计算机上安装了Eclipse for Java,并决定安装CDT和学习C。我安装了
MinGW
Cygwin
,CDT在我创建新项目时检测并尝试使用它们

< >我选择<代码>文件>新建C++项目< /C> >选择<代码> Hello World C++项目和 CygWiNccCC < /Cuth>工具链。我将项目命名为“asdf”,并在工具栏中点击“builddebug”。编译器完成时没有错误。我跑了,什么也没发生

手动浏览项目目录并运行asdf.exe时,会出现一个错误,提示:
“该程序无法启动,因为您的计算机缺少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系统
路径
变量的

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

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'之后。我认为编辑你的答案会更好。因为一开始我有点困惑。最好的…嗨,桑,我已经修好了。谢谢