真锋
永远保持一颗学习和专注的心
嵌入式视觉笔记

编译原理基础

GCC 是什么

GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器,以GPLLGPL许可证所发行的自由软件,也是GNU计划的关键部分,也是GNU工具链的主要组成部分之一。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。

原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。GCC在发布后很快地得到扩展,变得可处理C++。之后也变得可处理FortranPascalObjective-CJavaAdaGo与其他语言。许多操作系统,包括许多类Unix系统,如Linux及BSD家族都采用GCC作为标准编译器。

GCC原本用C开发,后来因为LLVMClang的崛起,它更快地将开发语言转换为C++。许多C的爱好者在对C++一知半解的情况下主观认定C++的性能一定会输给C,但是Ian Lance Taylor给出了不同的意见,并表明C++不但性能不输给C,而且能设计出更好,更容易维护的程序。

gcc 与 g++ 的区别

学习了几篇博客,发现知乎的一个回答相对表达清楚和准确性,链接在这

这里的 gcc (小写)与前文的 GCC 含义是不同的。简单来说,gcc 指的是 GCC 中的 GNU C Compiler(C 编译器);g++ 是 G++ 中的 GNU C++ Compiler(C++ 编译器),但实际上 gcc 和 g++ 都不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中的文件类型,调用对应的 GNU 编译器,所以更准确的说法是:gcc 调用了 C compiler, g++ 调用了C++ compiler。gcc 和 g++ 的主要区别如下:

  • 使用 gcc 编译 cpp 文件可能会报错,因为 gcc 编译文件时不会自动链接标准库 STL,而 g++ 会,为了能够使用 STL,需要添加参数 -lstdc++gcc -lstdc++ 和 g++ 不等价。
  • 对于 *.c 和 *.cpp 文件,gcc 分别当做 c 和 cpp 文件编译(c 和 cpp 的语法强度是不一样的)。
  • 对于 *.c 和 *.cpp 文件,g++ 则统一当做 cpp 文件编译。
  • gcc 在编译 c 文件时,可使用的预定义宏是比较少的。

Clang 是什么

Clang(发音为/ˈklæŋ/类似英文单字clang 是一个CC++Objective-CObjective-C++编程语言的** 编译器前端 **。它采用了 LLVM 作为其后端,而且由 LLVM2.6 开始,一起发布新版本。它的目标是提供一个GNU编译器套装(GCC)的替代品,支持了GNU编译器大多数的编译设置以及非官方语言的扩展。

MinGW是什么

参考 MinGW 维基百科

MinGW(Minimalist GNU for Windows),又称 mingw32,是将 GCC 编译器和 GNU Binutils 移植到 Win32 平台下的产物,包括一系列头文件(Win32API)、库和可执行文件。另有可用于产生 32 位及 64 位 Windows 可执行文件的 MinGW-w64 项目,是从原本 MinGW 产生的分支。如今已经独立发展。MinGW是从Cygwin(1.3.3版)基础上发展而来。

GCC 支持的语言大多在 MinGW 也受支持,其中涵盖 C、C++、Objective-C、Fortran 及 Ada。对于 C 语言之外的语言,MinGW 使用标准的 GNU 运行库,如 C++ 使用 GNU libstdc++。但是 MinGW 使用 Windows 中的C运行库。因此用 MinGW 开发的程序不需要额外的第三方 DLL 支持就可以直接在 Windows 下运行,而且也不一定必须遵从 GPL 许可证。这同时造成了 MinGW 开发的程序只能使用 Win32API 和跨平台的第三方库,而缺少 POSIX 支持[3],大多数 GNU 软件无法在不修改源代码的情况下用 MinGW 编译。

GTK 是什么

GTK(原名GTK+)最初是 GIMP 的专用开发库(GIMP Toolkit),后来发展为 Unix-like 系统 (类 Unix 系统)下开发图形界面的应用程序的主流开发工具之一。GTK 是自由软件,并且是 GNU 计划的一部分。自2019年2月6日起,GTK+ 改名为 GTK

GTK 使用 C 语言开发,但是其设计者使用面向对象技术。也提供了 C++(gtkmm)、Perl、Ruby、Java 和 Python(PyGTK)绑定,其他的绑定有 Ada、D、Haskell、PHP 和所有的 .NET 编程语言。使用 GTK 的环境有 GNOME 等,GNOME 是以 GTK 为基础,就是说为 GNOME 编写的程序使用 GTK 做为其工具箱。

GNU 是什么

GNU 是一个自由的操作系统,其内容软件完全以 GPL 方式发布。这个操作系统是 GNU计划 的主要目标,名称来自 GNU’s Not Unix! 的递归缩写,因为 GNU 的设计类似 Unix,但它不包含具著作权的 Unix 代码。作为操作系统,GNU 的发展仍未完成,其中最大的问题是具有完备功能的内核尚未被开发成功。GNU 的内核,称为 Hurd,是自由软件基金会发展的重点,但是其发展尚未成熟。在实际使用上,多半使用 Linux 内核、FreeBSD 等替代方案,作为系统核心,其中主要的操作系统是 Linux 的发行版。Linux 操作系统包涵了 Linux内核 与其他自由软件项目中的 GNU 组件和软件,可以被称为 GNU/Linux(见GNU/Linux命名争议)。

GNU 该系统的基本组成包括 GNU编译器套装(GCC)、GNU的C库( glibc)、以及 GNU核心工具组(coreutils)[14],另外也是GNU调试器(GDB)、GNU 二进制实用程序(binutils)、GNU Cash shell 和 GNOME 桌面环境。 GNU开发人员已经向 GNU 应用程序和工具的 Linux 移植 ,现在也广泛应用在其它操作系统中使用,如BSD变体的Solaris,和OS X作出了贡献。

GNU工具链是什么

GNU工具链(英语:GNU toolchain)是一个包含了由 GNU 计划所产生的各种编程工具的集合,其组成包括我们非常熟悉的 GCC 编译器,由自由软件基金会负责维护工作。这些工具形成了一条工具链,用于开发应用程序和操作系统。

GNU 工具链在针对嵌入式系统的 Linux内核、BSD 及其它软件的开发中起着至关重要的作用。GNU 工具链中的部分工具也被 Solaris, Mac OS X, Microsoft Windows (via Cygwin and MinGW/MSYS) and Sony PlayStation 3 等其它平台直接使用或进行了移植。

PS:想用滴滴云服务的人,可以用我的大师码 1995,有九折优惠。

赞赏

发表评论

textsms
account_circle
email

  • harley博主

    总结的不错,但是不够深入。

    11月前 回复

嵌入式视觉笔记

编译原理基础
GCC 是什么 GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部分,也是GNU工具链的主要组…
扫描二维码继续阅读
2020-09-30