在 1:
是的。套接字库随 Cygwin 一起提供 - 许多基于套接字的应用程序(例如 web servers)都包含在基本发行版中。
第 2 天:
是的。我认为 GNU C 运行时和库中的所有“第 2 节和第 3 节”系统调用都是由 cygwin runtume 实现的。您可以在 Cygwin 附带的手册页中查看这一点。 Cygwin实现的系统调用和std lib调用的列表可以找到here.
在 3: 是的。 Pthread 包含在 Cygwin 中。 link above 中提到的列表也提到了 pthread。
第 4 点: 任何基于 GNU 库构建的东西都应该在 Cygwin 和 Linux 之间几乎没有变化或没有变化(假设 Cygwin 上没有缺少依赖项)。根据 CPU 架构,您可能不得不担心word alignment、endianness 和其他特定于架构的移植问题,但如果您的目标是 Intel 上的 Windows 和 Linux,那么您的代码几乎不会出现由 CPU 架构引起的移植问题。
在 5: 默认情况下,Cygwin 将针对自己的共享库构建程序,但 GCC 可以交叉编译以针对其他平台。您可以(理论上)将 GCC 设置为交叉编译到编译器支持的任何目标。有 plenty of resources on the web 关于与 GCC 的交叉编译,我认为 Cygwin 上的过程不会有本质上的不同。
请注意,Cygwin 二进制文件不会在 Linux 上运行,反之亦然。您仍然需要为两者单独构建。
6:不确定 - 猜测它包含在标准运行时中,可能是因为出于某种原因需要包装 Win32 线程 API。
7: 不知道——在所有平台上的 g++ 上可能都是一样的。 显然是编译器错误。 Dan Moulding's Answer 更详细地介绍了这一点。
8 日: 是的。 IIRC QT is available in the standard builds 它肯定会在 Cygwin 上编译。与 Linux/Unix 一样,Cygwin 上的 QT 使用 X11 后端,因此您需要运行 X 服务器,例如 XMing。
为了避免对 X 服务器的依赖,您可能需要build QT apps against the Win32 API,。可以使用MinGW 来执行此操作,这是一组头文件和库,用于使用 GCC 构建本机 Win32 应用程序。 MinGW 可以在 Cygwin 环境中使用(Cygwin 上的 GCC 示例交叉编译到非 Cygwin 目标),cygwin.com 中的 installer 为您提供了安装它的选项。
MinGW 相当成熟;它具有所有“常见的嫌疑人”——您希望在 Unix/Linux GCC 开发环境中找到的库和头文件,并且非常稳定。它
通常是构建开源软件的 Win32 端口的首选工具,因为它 (a) 免费,(b) 支持软件使用的库,并且 (c) 使用 GCC,因此它不受 MSVC 和海湾合作委员会。
但是,语言和可用库中的这些辩证变化(例如,MSVC 不附带getopt 的实现)意味着在 MinGW 和 MSVC 之间移植程序可能非常繁琐。我的经验——虽然我只做过几次,但我的经验并不是非常广泛——在 MinGW32 和 Linux 之间移植应用程序比在 MinGW 和 MSVC 之间移植更容易。显然,具有不可移植依赖项(例如 Win32 特定 API 使用)的应用程序需要为新平台重新编写依赖组件,但标准库、头文件和语言方言的差异问题会少得多。
QT 在提供平台抽象层方面做得相当好。它为数据库访问、线程、I/O 和许多其他服务以及 GUI 提供 API。在可能的情况下使用 QT API 有助于提高可移植性,MinGW 附带的 Unix/Linux 风格的库意味着它可能为您提供一个很好的平台,让您可以使用相对较少的平台相关代码来制作将在 Win32 和 Linux 之间移植的应用程序。
编辑: Cygwin 中的 qt 开发包是:
- qt4:Qt 应用程序框架(源代码)
- qt4-devel-tools:Qt4 助手、设计师和语言学家
- qt4-doc:Qt4 API 文档
- qt4-qtconfig:Qt4 桌面配置应用程序
- qt4-qtdemo:Qt4 演示和示例
您可能还需要 gcc4-g++ 和其他一些零碎的东西。 This listing on the cygwin web site 有一个包列表。