gpt4 book ai didi

cygwin - 运行在 cygwin 中编译的应用程序,无需安装 cygwin

转载 作者:行者123 更新时间:2023-12-02 19:42:31 30 4
gpt4 key购买 nike

假设我有一个在 cygwin 下编译的应用程序,并且我想在不让用户安装 cygwin 的情况下分发该应用程序。打包可执行文件和 cygwin DLL 就足够了吗?

最佳答案

事情发生了变化。 Cygwin 库现在受 Lesser GPL (v3) 约束,这使得将它们与属于各种许可证(从 FOSS 到专有)的应用程序捆绑在一起成为可能。

阻碍的是 Cygwin 中的 POSIX 模拟从 native Windows 应用程序的角度来看有点太远了。

这就是我的 Cygnal Cygnal 代表 CYGwin Native Application Library:它是 Cygwin 的直接兼容分支,它会更改(或者在某些情况下只是重新配置)某些功能的行为,以便符合 Windows 平台的 native 约定.

基本的“Hello, World”Cygwin 程序需要两个库。名为 cyggcc_s-1.dll 的 GCC 运行时和 Cygwin DLL cygwin1.dll。 Cygnal 项目提供了后者的替代品。 (32 位版本可供下载)。

Cygwin POSIX 世界观与 Windows 之间一个明显的不兼容领域是路径处理。文件系统的 Cygwin View 是通过一个假的 / 根目录,以及它自己的内部“挂载表”提供诸如 /cygdrive/proc/dev。 Cygnal 消除了这一切。路径是 Win32 路径。当前工作目录的行为类似于 Windows 当前工作目录。驱动器与当前目录关联,并且像 D:foo.txt 这样的驱动器相对路径在 Cygnal 下工作。在 Cygnal 下,/dev/proc 仍然可用:它们可以作为特殊前缀 dev:/proc:/进行访问。不允许 chdir 进入这些:这不是 native 的!在 Cygnal 下,如果您 chdirD:\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 函数报告带有 CYGNAL 前缀的 sysname,而不是 CYGWIN。通过这种方式,您的程序可以知道它是在 Cygnal 而不是 Cygwin(或任何其他 POSIX 平台)上运行。因此,您可以进行任何必要的调整:例如,如果您的程序需要 /dev/null,在 Cygnal 上它可以查找 dev:/null

关于cygwin - 运行在 cygwin 中编译的应用程序,无需安装 cygwin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1981043/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com