我想用cygwin编写独立exe文件。我有两个选择:用Cygwin编译独立exe文件
Staticly链接cygwin1.dll
如果我能静态链接cygwin1.dll,那么我就可以得到一个独立的exe文件。与MYPROG.EXE
合并cygwin1.dll如果我可以用我的程序合并cygwin1.dll时,我可以得到一个独立的exe文件。
不建议我使用IlMerge。这是行不通的,因为我没有用.NET编译我的程序。
是否有这些选项可能?如果不是,这种困境有什么可能吗?感谢名单!
我想用cygwin编写独立exe文件。我有两个选择:用Cygwin编译独立exe文件
Staticly链接cygwin1.dll
如果我能静态链接cygwin1.dll,那么我就可以得到一个独立的exe文件。
与MYPROG.EXE
合并cygwin1.dll如果我可以用我的程序合并cygwin1.dll时,我可以得到一个独立的exe文件。
不建议我使用IlMerge。这是行不通的,因为我没有用.NET编译我的程序。
是否有这些选项可能?如果不是,这种困境有什么可能吗?感谢名单!
我可以看到你可能认为合理的两种可能性。一种方法是使用不同的编译器(例如MinGW - 无论如何不需要cygwin)构建一个存根可执行文件,将主可执行文件和cygwin.dll解压缩到一个临时目录中,然后生成该可执行文件。为了只分发一个可执行文件,你需要将主可执行文件和cygwin.dll作为二进制资源添加到“存根”中。这有点难看,但非常简单。
另一种方法是抓取source to cygwin,并将其构建为静态库。至少在理论上,这应该是更清洁 - 但它也无疑是更多的工作。将它构建为纯静态代码而不是DLL将几乎肯定需要一些工作,但很难甚至猜测多少。只是浏览一下,看起来不太可能是几个小时的快速工作,或者类似的事情(除非我错过了那些已经支持静态构建静态的东西)。
尝试通过-mno-cygwin
作为编译器和链接器标志。如果你的程序需求足够简单,这将避免依赖于Cygwin库和创建一个独立的EXE。
其他职位已经表明,这是行不通的,为了更新的读者。该功能现在已被弃用。 – eewanco 2015-10-14 15:30:09
杰瑞更精确的答案。
下面描述的程序应该面临您的权利和许可法!我知道它可以工作,但分发结果的权利(或者甚至执行程序)可能(并且我真的感觉到)受到Cygwin许可证的约束。那是因为你的应用程序仍然会参考Cygwin的(即使它是无用的 - 但仍然在你的应用程序)
假设hello.exe
是你的伟大的应用程序的伟大工程目录在Cygwin下编译名C:\xxx\yyy\zzz\
在在cygwin控制台去C:\xxx\yyy\zzz
并键入
objdump -p hello.exe | grep "DLL Name"
您获得您的应用程序使用的所有DLL。然后将C:\xxx\yyy\zzz
复制到列出的所有DLL,并为cygwin特定。
请注意,您的应用程序可能会调用其他应用程序(例如使用exec函数)---查找库应用程序使用并复制这些库以及此应用程序本身 - C:\xxx\yyy\zzz
。
也许你将不得不重新编译你的项目与种类-L C:\xxx\yyy\zzz
左右的选项。观察源中的所有其他路径。
因此,您的应用程序独立于Cygwin安装,您可以将其功能展示给其他没有Cygwin的Windows用户。但是 - 我再次指出并问你 - 请注意Cygwin创作者的适当许可和法律,并观察它们!
我认为你实际上需要CYGWIN.DLL的服务,并且只使用-Mno-cygwin(或MinGW)将不适合你? – RBerteig 2010-09-03 23:34:47
我不知道。我正在使用GCJ,但是我无法得到与mingw一起工作的GCJ。 – 2010-09-04 12:38:24