假设我有一个在Cygwin下编译的应用程序,我想分发这个应用程序,而不需要用户安装Cygwin。仅打包可执行文件和Cygwin DLL文件是否足够?
假设我有一个在Cygwin下编译的应用程序,我想分发这个应用程序,而不需要用户安装Cygwin。仅打包可执行文件和Cygwin DLL文件是否足够?
/
和它自己的内部“挂载表”来提供空间,如/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 根目录已经不存在了。uname
函数返回的sysname
带有CYGNAL
前缀,而不是CYGWIN
。通过这种方式,您的程序可以知道它正在Cygnal上运行,而不是Cygwin(或任何其他POSIX平台)。因此,您可以进行任何必要的调整:例如,如果您的程序需要/dev/null
,则在Cygnal上可以查找dev:/null
。你的应用程序是否真正需要Cygwin提供的Posix模拟功能?如果不需要,你可以使用-mno-cygwin标志进行编译,这样它就不会依赖于Cygwin,而是成为一个本地的Windows应用程序。通常,你只需要一个真正的shell(bash)来配置和构建你的应用程序,但实际上你并不需要Cygwin的Posix功能。
另一个选择是MSYS + MinGW,这是Cygwin的一个轻量级分支。它提供了一个默认生成本地Windows应用程序的编译环境。
第三个选项是使用Cygwin中的MinGW编译器。它们应该可以通过正常的Cygwin软件包管理器获得。然后你可以使用MinGW编译器为跨平台编译项目进行配置。