我有一些关于cygwin的问题:
read()
和write()
函数? -lpthread
? #include <iostream>
不需要using namespace std;
? 在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开发包是:
你可能也需要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的一部分。