关于Cygwin的一些问题(套接字,线程,其他编程和shell问题)

我有一些关于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的其他分区吗?

在1:是的。 套接字库随Cygwin一起提供 – 许多基于套接字的应用程序(如Web服务器)都包含在基本发行版中。

2:是的。 我认为GNU C运行时和库中的所有“第2节和第3节”系统调用都是由cygwin runtume实现的。 您可以在Cygwin附带的手册页中查看。 可以在这里找到Cygwin实现的系统调用和std lib调用列表。

3:是的。 Cythwin中包含Pthread。 上面的链接中提到的列表也提到了pthreads。

4:针对GNU库构建的任何东西都应该在Cygwin和Linux之间很少或根本没有变化(假设Cygwin没有依赖关系)。 根据CPU体系结构,您可能不得不担心字对齐 , 字节顺序和其他体系结构特定的移植问题,但是如果您将目标锁定在英特尔的Windows和Linux上,那么如果有CPU架构出现任何端口问题,您的代码将很少。

5: Cygwin将默认构建一个针对自己的共享库的程序,但是GCC可以交叉编译以针对其他平台。 您可以(理论上)将GCC设置为交叉编译到编译器支持的任何目标。 网上有很多关于与GCC交叉编译的资源 ,我不认为这个过程在Cygwin上会有很大的不同。

请注意,Cygwin二进制文件不能在Linux上运行 – 反之亦然。 你仍然需要两个单独的版本。

6:不确定 – 猜测它包含在标准运行时,也许是因为由于某种原因需要包装Win32线程API。

7: 不知道 – 所有平台上的g ++可能都是一样的。 显然是一个编译器错误。 Dan Molding的答案更详细地介绍了这一点。

8:是的。 IIRC QT可以在标准版本中使用 ,它一定会在Cygwin上编译。 与Linux / Unix一样,Cygwin上的QT使用X11后端,因此您需要运行XMing等X服务器。

为了避免依赖于X服务器,您可能需要针对Win32 API构建QT应用程序 。 MinGW可以做到这一点, MinGW是一组头文件和库,可以用GCC构建原生的Win32应用程序。 MinGW可以在Cygwin环境中使用(Cygwin交叉编译为非Cygwin目标的GCC示例), cygwin.com中的安装程序提供了安装它的选项。

MinGW已经相当成熟了, 它拥有所有“常见的嫌疑人” – 你期望在Unix / Linux GCC开发环境中找到的库和头文件,并且非常稳定。 它通常是构建开源软件的Win32端口的首选工具,因为它是免费的,(b)支持软件使用的库,(c)使用GCC,因此不受MSVC之间的辩证变化的影响和GCC。

但是,语言和可用库中的这些辩证变体(例如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 ++和其他一些零碎的东西。 cygwin网站上的这个列表有一个包列表。

对于除了5之外的所有这些,都是“是”。您必须为Linux分别构建可执行文件,但这应该很简单,因为对“4”的回答是“是”。

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

是的,是的,是的,是的(如果你仔细地写,不要使用任何特定的cygwin),否。

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

1-4:这些答案都是“是”,因为所有这些功能都是POSIX标准的一部分。 Cygwin基本上是Windows的一个POSIX层,所以自然,Cygwin包含了所有这些特性。

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

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

7: 这是GCC中的一个错误 (在所有平台上)。 它已经存在了很长一段时间,可能永远不会被修复。

8:关心ToughbridgeWells做了很好的解释,所以我没有太多的话要说。 不过,值得注意的是Cygwin的软件包列表中有X.org X Window System。 使用Cygwin 1.7.x,设置它并使用它是一件轻而易举的事情 ,它看起来非常坚固。 如果你想在X中使用Qt,我建议使用Cygwin的X服务器。

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

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