2009-09-25 86 views
6

我在运行gcc的窗口中使用了cygwin。但是在创建.exe文件后,如果我在其他没有cygwin的计算机上运行它,则说cygwin1.dll找不到。有没有办法编译它们,以便它们可以在任何系统上运行?使用gcc编译(Windows上的cygwin)

回答

10

在你的情况下,尝试复制cygwin1.dll以及(但它可以依靠其他DLL以及)(当然你必须遵守Cygwin的license至于分发cygwin1.dll)
Cygwin中,您可以使用随时查询所需的模块:

objdump -p a.exe | grep 'DLL Name' 

OR

cygcheck ./a.exe 

或在一般的窗户,使用这样的工具:Dependency Walker

+0

cygcheck说:“错误:无法找到a.exe”如果我写“cygcheck a.exe” – avd

+2

使用:“cygcheck ./a.exe” – Amro

4

您可以尝试使用命令行选项-mno-cygwin进行编译。

11

您需要编译为MinGW(最小GNU Win32)模式。您可以通过安装mingw而不是(或除了)cygwin,或者通过将--mno-cygwin编译器选项传递给cygwin gcc来实现。

+0

但我在我的程序中使用fork函数。如果我使用-mno-cygwin,它说fork没有定义。 – avd

+2

然后,您将不得不为您的用户提供cygwin1.dll。 Windows本身不提供fork()系统调用。最好重写你的代码,不再使用fork。 –

0

http://cygwin.com/faq/faq.html#faq.programming.win32-no-cygwin

我如何编译不使用Cygwin一个Win32可执行程序?

由MinGW的海湾合作委员会,mingw64-i686的海湾合作委员会提供的编译器,以及mingw64-x86_64的-gcc的包联系起来反对微软标准的DLL,而不是Cygwin的。这对于不需要UNIX仿真层的本机Windows程序来说是可取的。

这不要与'MinGW'(用于Windows的Minimalist GNU)混淆,这是一个完全独立的工作。

相关问题