【问题标题】:Some Issues About Cygwin[Linux in Windows] (socket,thread,other programming and shell issues)关于 Cygwin [Linux in Windows] 的一些问题(套接字、线程、其他编程和 shell 问题)
【发布时间】:2010-01-18 16:17:56
【问题描述】:

我有一些关于 cygwin 的问题:

  1. 我可以使用 Cygwin 开发基于套接字的代码吗?
  2. Cygwin 是否具有可用于文件描述符的 read()write() 函数?
  3. 我可以在 Cygwin 中使用 Pthread 库吗?
  4. 在 Cygwin 中编译的代码是否也 在Linux中编译没有任何改变或几乎没有改变?
  5. 将生成的可执行文件 Cygwin 在 Linux 上运行?
  6. 为什么 Cygwin 不需要链接器 当我使用 pthread 库时选项 -lpthread
  7. 为什么在#include <iostream> 中我不需要使用using namespace std;
  8. 我可以在 Cygwin 中使用 QT 吗?如果有,怎么做?
  9. 我可以在其他系统中启动我的 Linux
  10. 用 Cygwin 分区并使用它?
  11. 我可以访问其他分区吗 那是 Cygwin 中的 EXT3 吗?

【问题讨论】:

    标签: c++ c linux cygwin


    【解决方案1】:

    在 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 alignmentendianness 和其他特定于架构的移植问题,但如果您的目标是 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 有一个包列表。

    【讨论】:

    • 在cygwin中使用QT必须安装哪个包?
    【解决方案2】:

    对除 5 之外的所有选项都表示“是”。您必须为 Linux 单独构建可执行文件,但这应该很简单,因为 4 的答案是“是”。

    确保在两个平台上都安装了所有需要的开发头文件。

    【讨论】:

      【解决方案3】:

      是的,是的,是的,是的(如果你写得很仔细并且不使用任何特定于 cygwin 的东西),不。

      On 5:有没有可能从Cygwin 交叉编译到Linux,我真的不知道。如果是这样,那么从技术上讲,一些“由 Cygwin 构建”的可执行文件将在 Linux 上运行。但 Cygwin 可执行文件无法在 Linux 上运行。

      【讨论】:

        【解决方案4】:

        1-4:这些问题的答案都是“是”,因为您询问的所有这些功能都是 POSIX 标准的一部分。 Cygwin 基本上是 Windows 的 POSIX 层,因此,Cygwin 自然包含所有这些功能。

        5:不,Cygwin 二进制文件不会在 Linux 内核下执行,因为 Cygwin 生成的代码最终是 Windows 原生代码。它将与通常的 Windows DLL(如 kernel32.dll)链接,而 Linux 甚至没有 DLL 的概念(它具有相似但不同的共享对象)。更重要的是,在 Cygwin 下构建的可执行文件将是 PE 格式,但 Linux 一般使用 ELF 格式的可执行文件。当然,您可以在 Cygwin 下进行交叉编译,从而生成本机 Linux 可执行文件,但这听起来不像您正在寻找的。此外,在 Cygwin 下编译新版本的 GCC 以用作交叉编译器可能并非易事。

        6: Cygwin 下的 GCC 不需要使用-lpthread,因为 Cygwin 下的所有 pthread 代码都在 cygwin1.dll 中,默认情况下始终链接。

        7: This is a bug in GCC(在所有平台上)。它已经存在了很长时间并且可能永远不会修复。

        8: ConcernedOfTunbridgeWells 很好地解释了这一点,所以我无话可说。然而,值得注意的是 Cygwin 在其软件包列表中包含 X.org X Window System。使用 Cygwin 1.7.x,设置和使用它是轻而易举的微风,而且看起来非常坚如磐石。如果你想在 X 中使用 Qt,我建议使用 Cygwin 的 X 服务器。

        【讨论】:

        • +1 是对 #7 的有力回答,尽管 Xming 是比标准 Cygwin 更好的通用 X 服务器。 IMO XMing 几乎和 Starnet 一样好。
        【解决方案5】:

        针对#7,您拥有的 C++ 编译器的版本可能已过时。如果您不需要 linux/posix 可移植性,我会切换到非 cygwin MinGW GCC 编译器 - 您可以在 http://tdragon.net/recentgcc/ 获得 4.4.1

        【讨论】:

          【解决方案6】:

          关于 6,您不需要 -lpthread,因为 Pthreads 支持是 Cygwin DLL 的一部分。

          【讨论】:

            猜你喜欢
            • 2010-09-15
            • 2014-03-12
            • 2023-04-02
            • 1970-01-01
            • 2011-03-18
            • 2011-04-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多