比方说,我有我的cygwin下编译的应用程序,我想分发应用程序,而无需用户安装cygwin。打包可执行文件和cygwin DLL足够了吗?运行的应用程序,在Cygwin中编译,而无需安装了cygwin
回答
通常,是的。虽然(Windows \ System32)确保将Cygwin DLL安装在公共位置,但是当它的多个版本加载到同一台机器上时,此DLL的行为非常糟糕。
[GPL链接和衍生作品(http://en.wikipedia.org/wiki/GNU_General_Public_License#Linking_and_derived_works) – 2009-12-30 16:36:03
问题未说明关于作者不释放任何代码。许多实用程序会捆绑cygwin1.dll。一个这样的例子是cntml:http://cntlm.sourceforge.net/。 – brianegge 2010-01-06 02:57:41
你可以尝试编译所有静态。这应该允许你运行一切,而不需要libs(因为它们已经在你的二进制文件中)。 但是,这也意味着它可能无法正常工作的所有平台上的cygwin是否需要不同的或较新的DLL。
这将无法正常工作:http://stackoverflow.com/questions/340696/can-you-statically-compile-a-cygwin-application – Hut8 2013-07-24 15:20:36
您的应用程序是否真的需要任何Cygwin提供的Posix仿真程序?如果没有,你可以使用-mno-cygwin标志编译它,它不会依赖于cygwin,而是一个本地Windows应用程序。通常,您只需要一个真正的shell(bash)来配置和构建应用程序,但实际上并不需要Cygwin的Posix功能。
另一种替代方案是MSYS + MinGW,它是Cygwin的轻量级叉子。这提供了一个默认生成本地Windows应用程序的编译环境。
第三个选择是从自身的Cygwin使用MinGW的编译器。它们应该可以通过普通的Cygwin软件包管理器来使用。然后,您将使用MinGW编译器配置项目进行交叉编译。
MSYS不是cygwin的分支。 – 2009-12-30 18:08:42
http://www.mingw.org/history http://en.wikipedia.org/wiki/MinGW#Comparison_with_Cygwin 另外,MinGW邮件列表上的主要人员经常说MinGW/MSYS是一个叉cygwin的。 – 2009-12-30 18:24:23
MinGW不是MSYS – 2009-12-30 18:28:51
事情已经改变了。在Cygwin库目前正在较宽松GPL(V3),这使得它能够以落在下范围广泛的许可证,从FOSS到专有应用捆扎在一起。
什么阻碍的方式是,在Cygwin中的POSIX模拟从本地Windows应用程序的角度看需要的东西有点过分。
这是我Cygnal项目进来Cygnal公司代表Cygwin的原生应用程序库:这是一个简易的Cygwin兼容叉而改变,或在某些情况下,只需重新可以配置,某些功能的行为,以以符合Windows平台的本地惯例。
一个基本的“Hello,World”Cygwin程序需要两个库。一个GCC运行时称为cyggcc_s-1.dll
和Cygwin的DLL cygwin1.dll
。 Cygnal项目为后者提供了替代品。 (32位版本可供下载)。世界Cygwin的POSIX视图和Windows之间的不兼容的
一个明显的区域是路径处理。文件系统的Cygwin的视图是通过假/
根目录,它提供等/cygdrive
,/proc
和/dev
空格其自身的内部“装载表”。 Cygnal放弃了这一切。路径是Win32路径。当前工作目录的行为与Windows当前工作目录类似。驱动器与当前目录相关联,驱动器相对路径如D:foo.txt
在Cygnal下工作。在Cygnal下,/dev
和/proc
仍可用:它们作为特殊前缀dev:/
和proc:/
进行访问。这是不允许chdir
这些:这不会是本地的!在Cygnal下,如果chdir
到D:\wherever
那么您当前的驱动器是D
驱动器,而路径/foo
或\foo
指的是D:\foo
。Cygwin的主要POSIX根目录不见了。
然而,使用Cygnal,您可以继续使用POSIX功能,从而可以开发跨平台程序,这些程序只需较少的代码即可基于平台进行切换,而使用MinGW或Microsoft Visual C/C++。
例如:你可以写使用VT100代码和termios
一个Win32控制台应用程序。相同的代码将在Unix上运行。无需在Windows上使用Win32控制台API,在POSIX系统上使用VT100/termios
。
又如:穿线,你可以只使用POSIX线程。 pthread_create
启动线程,pthread_mutex_lock
来锁定互斥锁等。对于转换为Win32或POSIX的线程,您的程序不需要可移植性抽象;你只需要使用POSIX就是这样。
Cygnal中的uname
函数报告sysname
带有CYGNAL
前缀而不是CYGWIN
。通过这种方式,您的程序可以知道它在Cygnal上运行,而不是在Cygwin(或任何其他POSIX平台)上运行。因此,您可以进行必要的调整:例如,如果您的程序需要/dev/null
,则可以使用Cygnal代替dev:/null
。
- 1. 从Java运行cygwin编译的程序
- 2. Cygwin无法编译我的程序
- 3. 在我的Windows安装中安装Cygwin编译的Python模块
- 4. Clojure编译并使用cygwin运行
- 5. Cygwin的程序编译但不运行的
- 6. 用Cygwin编译TCC
- 7. 用cygwin编译winapi
- 8. 用Cygwin编译C++
- 9. 安装libyaml Cygwin
- 10. 如何从Windows c#(visual studio)运行cygwin编译的程序?
- 11. 使用Cygwin编译器在Netbeans IDE中安装FreeGlut 3.0.0
- 12. 在cygwin中编译OpenEXR
- 13. 如何编译需要在Cygwin上
- 14. Python线程无法在cygwin上运行
- 15. 如何发布/编译程序,而无需用户安装它
- 16. 安装Cygwin X11包
- 17. 为Cygwin安装PDCurses
- 18. Cygwin鼠标安装
- 19. 从另一个应用程序在Cygwin中运行bash命令
- 20. 用cygwin/gfortran编译或用acml编译
- 21. 如何用cygwin编译ioping
- 22. 用windows编译ncmpcpp与cygwin
- 23. 编译使用qt和cygwin编译器的独立应用程序
- 24. 在Cygwin上编译node.js
- 25. 使用Cygwin安装ActiveMQ
- 26. 在Cygwin上安装Ant
- 27. 在Cygwin上安装PIL
- 28. 在cygwin上安装Poppler
- 29. Kngter在CygWin上安装
- 30. Scons无法从Cygwin运行
Cygwin的DLL是GPL的,所以你也必须分发您的应用程序的来源。 – 2009-12-30 16:29:37
但您可以购买Cygwin的商业许可证。 – 2009-12-30 18:27:08
请详细说明 - 因为答案中似乎有两种解释。你的意思是技术上(我需要分发哪些*其他*文件),或者合法(许可证允许我做什么)? – Wim 2010-01-06 12:20:38