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

Saj*_*ani 16 c c++ linux cygwin

我对cygwin有一些疑问:

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

Con*_*lls 14

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

2: 是的.我认为GNU C运行时和库中的所有'第2和第3部分'系统调用都是由cygwin runtume实现的.您可以在Cygwin附带的手册页中查看.可以在此处找到Cygwin实现的系统调用和std lib调用的列表.

3:是的.Pthread包含在Cygwin中.上面链接中提到的列表也提到了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端口的首选工具,因为它是(a)免费的,(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网站上的这个列表有一个包列表.