Saj*_*ani 16 c c++ linux cygwin
我对cygwin有一些疑问:
read()
与write()
文件描述符一起使用的函数?-lpthread
当我使用pthread库时,为什么Cygwin不需要链接器选项?#include <iostream>
我不需要使用using namespace std;
?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开发包是:
您可能还需要gcc4-g ++和其他一些零碎的东西. cygwin网站上的这个列表有一个包列表.