首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么GCC-Windows依赖于cygwin?

为什么GCC-Windows依赖于cygwin?
EN

Stack Overflow用户
提问于 2008-10-09 16:11:21
回答 9查看 20.4K关注 0票数 39

我不是C++开发人员,但我一直对编译器感兴趣,我对修改GCC的一些东西(特别是LLVM)很感兴趣。

在Windows上,GCC需要POSIX仿真层(cygwin或MinGW)才能正确运行。

为什么会这样呢?

我使用了许多其他的软件,用C++编写,并针对不同的平台(Subversion、Firefox、MySQL)进行交叉编译,而且它们都不需要cygwin或MinGW。

我对C++最佳实践编程的理解是,您可以合理地编写与平台无关的代码,并在编译过程中处理所有差异。

GCC是怎么回事?为什么不能在Windows上本地运行呢?

编辑:

好的,到目前为止,两个答复说,基本上,"GCC使用posix层,因为它使用posix头“。

但这并不能真正回答问题。

假设我已经为我最喜欢的标准库设置了一组标头。为什么我还需要posix头呢?

GCC是否要求赛格温/明实际运行?

还是只需要头部和库的仿真层?如果是这样的话,为什么我不能给它一个包含所需资源的"lib“目录呢?

再次编辑:

好吧,我再试着澄清这个问题.

我还用D语言编写代码。官方编译器名为"dmd“,Windows和linux都有官方的编译器二进制文件。

Windows版本不需要任何形式的POSIX仿真。而且Linux版本不需要任何形式的Win32仿真。如果编译器对其环境有假设,那么它很好地隐藏了这些假设。

当然,我必须告诉编译器在哪里可以找到标准库,在哪里可以找到静态或动态链接的库。

相比之下,GCC坚持假装它是在posix环境中运行的,它要求我通过建立一个模拟层来幽默这些假设。

但是,GCC的内心到底依赖于哪一层呢?它是否只是在寻找stdlib头,并且假设它会在"/usr/lib“中找到这些标头?

如果是这样的话,难道我不能告诉它在"C:/gcc/lib“中查找那些头文件吗?

还是GCC自己依赖POSIX库来访问文件系统(以及做其他低级的事情)?如果是这样的话,我想知道为什么他们不只是静态地链接到他们最喜欢的windows POSIX库。当用户可以将依赖关系直接构建到应用程序中时,为什么需要用户设置依赖项呢?

EN

回答 9

Stack Overflow用户

发布于 2008-10-26 12:36:21

其实,问题的前提是错误的:MinGW GCC做而不是需要Cygwin。

你会发现你根本不需要Cygwin。它在Windows上本地运行(至少32位)。工具链和产生的二进制文件都独立于Cygwin。

Cygwin中可用的MinGW编译器是不同的:它们构建在Cygwin平台上,以生成不依赖Cygwin运行时的代码。在这种情况下,编译器本身确实依赖Cygwin。但那是因为你是从Cygwin安装的。

票数 37
EN

Stack Overflow用户

发布于 2008-11-04 10:48:19

我试着让我的程序在Windows下表现得像一个好的Windows公民,在Linux下像一个好的Linux公民。

票数 7
EN

Stack Overflow用户

发布于 2009-04-19 03:43:18

POSIX (,便携式操作系统接口)是一个不断发展、不断发展的文档,由IEEE生产,ANSI和ISO标准化,POSIX的目标是实现应用程序的源代码可移植性。

在实践中,目标被定义为能够编写一个源代码实现,并让它在不同的(POSIX兼容的)系统上运行,只需重新编译。

GCC是一个能够实现这一承诺的编译器,因此,它需要一层代码来使机器“达到”POSIX标准。

这是回答你问题的核心。

为了理解我的意思,我会给你这个练习:

  • 编写一个没有操作系统特定的#ifdefs的程序,该程序接受用户的某个目录路径作为输入,并将其内容的列表(一个级别)写入到stdout。

我想您会发现,编写只使用在任何UNIX或LINUX系统上编译的本地WIN32 API的代码是非常困难的。

编写使用POSIX API的代码--就像在任何LINUX上一样--并让它在Windows下编译(DevStudio2005有数量惊人的符合POSIX的标头,now...you可能可以接近)。

从上面的LINUX程序,现在编译它在GCC下运行的Cygwin或MinGW。我敢打赌它会编译和运行。

GCC是如何做到这一点的?由Cygwin或MinGW提供的POSIX及其底层实现。

GCC在Windows下对Cygwin/MinGW的依赖现在更有意义了吗?

  1. POSIX.4:为真实世界编程,Bill O. Gallmeister,O‘’Reilly& Associates,Inc.,pg 2
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/187990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档