首页 > 其他分享 >GCC使用教程——GCC是什么?

GCC使用教程——GCC是什么?

时间:2024-02-02 16:13:20浏览次数:40  
标签:GCC 操作系统 GNU 使用 教程 gcc 编译器 Linux

整理学习来自:https://www.xinbaoku.com/gcc/

对于 GCC 的认知,很多读者还仅停留在“GCC 是一个C语言编译器”的层面,是很片面的。从本节开始,我将带领大家系统学习 GCC,本节先带领大家系统地了解一下 GCC。

谈到 GCC,就不得不提 GNU 计划。GNU 全称 GNU's Not UNIX,又被称为“革奴计划”,由理查德·斯托曼于 1983 年发起。GNU 计划的最终目标是打造出一套完全自由(即自由使用、自由更改、自由发布)、开源的操作系统,并初步将其命名为 GNU 操作系统(其 logo 如图 1 所示)。

GNU计划的logo:非洲牛羚
图 1 GNU 操作系统的 logo:非洲牛羚


GNU 计划的实施可谓一波三折,最重要的一点是,虽然该计划为 GNU 操作系统量身定做了名为 Thr Hurd 的系统内核,但由于其性能比不上同时期诞生的 Linux 内核,最终 GNU 计划放弃 The Hurd 而选用 Linux 作为 GNU 操作系统的内核。在 Linux 内核的基础上,GNU 计划开发了很多系统部件,GCC 就是其中之一(除此之外,还有 Emacs 等非常实用的软件)。

由此看来,GNU 计划最终实现了“打造一套自由、开源的操作系统”的初衷,但该操作系统并非完全产自 GNU 计划,因此其被称为 GNU/Linux 操作系统(人们更习惯称为 Linux 操作系统)。注意,开源、自由并不等于免费,有关它们的区别,读者可阅读《开源就等于免费吗?》一文。

早期 GCC 的全拼为 GNU C Compiler,即 GUN 计划诞生的 C 语言编译器,显然最初 GCC 的定位确实只用于编译 C 语言。但经过这些年不断的迭代,GCC 的功能得到了很大的扩展,它不仅可以用来编译 C 语言程序,还可以处理 C++、Go、Objective -C 等多种编译语言编写的程序。与此同时,由于之前的 GNU C Compiler 已经无法完美诠释 GCC 的含义,所以其英文全称被重新定义为  GNU Compiler Collection,即 GNU 编译器套件。

所谓编译器,可以简单地将其理解为“翻译器”。要知道,计算机只认识二进制指令(仅有 0 和 1 组成的指令),我们日常编写的 C 语言代码、C++ 代码、Go 代码等,计算机根本无法识别,只有将程序中的每条语句翻译成对应的二进制指令,计算机才能执行。

GCC 编译器从而停止过改进。截止到今日(2020 年 5 月),GCC 已经从最初的 1.0 版本发展到了 10.1 版本,期间历经了上百个版本的迭代。作为一款最受欢迎的编译器,GCC 被移植到数以千计的硬件/软件平台上,几乎所有的 Linux 发行版也都默认安装有 GCC 编译器。

 

表1:GCC 支持的硬件平台(部分)
硬件操作系统
Alpha Red Hat Linux 7.1
HPPA HPUX 11.0
Intel x86 Debian Linux 2.2、Red Hat Linux 6.2 和 FreeBSD 4.5
MIPS IRIX 6.5
PowerPC AIX 4.3.3
Sparc Solaris 2.7


值得一提的是,原汁原味的 GCC 编译器没有我们熟悉的界面窗口,要想使用它,必须编写对应的 gcc 命令。所谓原汁原味,指的是纯 GCC 编译器和集成了 GCC 编译器的开发软件(IDE),和前者相比,后者在集成 GCC 编译器功能的同时,还向用户提供了友好的界面窗口,使得用户即便记不住 gcc 命令,也能从事开发工作,这极大地降低了用户的学习成本。

我们知道,操作系统大致分为 2 大阵营,分别是 Windows 阵营和类 Unix 阵营(包括 Unix、Linux、Mac OS、安卓等)。通常情况下,Windows 系统下用户更习惯使用现有的 IDE 来编译程序;而类 Unix 系统下,用户更喜欢直接编写相应的 gcc 命令来编译程序。

在了解什么是 GCC 编译器的基础上,这里以在 CentOS 操作系统(Linux 发行版之一)上使用 gcc 命令运行 C 语言程序为例,让读者更直观的感受一下 GCC 编译器的功能和使用方法。

如下是我们在 vim 编辑器中编写的一段完整的 C 语言程序,其功能是输出一个 "Hello, World!":


Linux系统下编写C语言程序
图 1 Linux 系统下编写 C 语言程序 对于此程序,我们可以使用如下的 gcc 命令:

gcc demo.c -o demo.exe

下图演示了如何使用 gcc 命令将 C 语言代码编译成一个可执行文件:


gcc命令编译C语言程序
图 2 gcc 命令编译 C 语言程序

标签:GCC,操作系统,GNU,使用,教程,gcc,编译器,Linux
From: https://www.cnblogs.com/Galesaur-wcy/p/18003340

相关文章

  • ubuntu上安装meson & 如何使用meson编译C代码
    一·搭建meson环境并简单编译:1.什么是meson  Meson旨在开发最具可用性和快速的构建系统。提供简单但强大的声明式语言用来描述构建。原生支持最新的工具和框架,如Qt5、代码覆盖率、单元测试和预编译头文件等。利用一组优化技术来快速变异代码,包括增量编译和完全编译。 ......
  • 使用annotationForMap实例化注解
    sun.reflect.annotation.AnnotationParser#annotationForMap/***Returnsanannotationofthegiventypebackedbythegiven*member->valuemap.*/publicstaticAnnotationannotationForMap(finalClass<?extendsAnnotation>......
  • Java中使用StopWatch实现代码块耗时统计/计时某段代码执行
    场景Java实战-基于JDK的LRU算法实现、优雅的实现代码耗时统计(SpringAOP、AutoCloseable方式):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130970242上面讲了统计方法的耗时,实现和使用面向方法体。如果是在方法中,需要频繁统计一段段的代码块的耗时,可以使用St......
  • 在Mac上使用Emacs初步
    其他操作系统估计也差不多。安装如果使用brew就是brewinstallemacs。安装后不会在Applications里面显示一个程序,需要在命令行里执行emacs。使用进入和退出上面刚说了一种进入的方法。如果想用Emacs直接打开文件,就敲个空格输入文件就好了。跟Vim一样。退出的快捷键是C-xC-......
  • 无涯教程-toString()函数
    此方法返回表示指定对象的字符串。toString()-语法string.toString()toString()-返回值返回表示指定对象的字符串。toString()-示例varstr="Applesareround,andApplesareJuicy.";console.log(str.toString());运行上面代码输出Applesareround,an......
  • Shell中set -e和if语句的组合使用
    shell脚本开头加上set-e命令后,在运行过程中如果出现返回值为非零,整个脚本就可以立刻退出。假如脚本中有if判断,很可能if条件的返回值是不为0的。一开始我是把hadoopfs-test-d$hdfs_folder单独写一行的,由于folder不存在,所以脚本直接退出。所以遇到这种情况,需要把有可能是结......
  • Podman使用(Mac M1)
    1.前言弃用docker选择使用podman的理由:使用虚拟机进行容器管理不需要本机root权限非守护进程podman命令与docker一致2.安装及配置使用homebrew安装podmanbrewinstallpodmanbrewinstallpodman-composebrewinstallpodman-desktop创建podman虚拟机:通过podman-d......
  • 深度|应用可观测性之灵活如何使用分布式调用链进行服务性能调优
    微服务架构的快速发展使得分布式链路追踪系统成为观测体系中越来越重要的组件。众安科技的分布式追踪系统经过数年发展后,已覆盖众安保险的绝大部分在线业务,完成了上千+微服务和几十万+服务实例的在线链路追踪。本次分享将通过介绍调用链瀑布图和服务拓扑图这两个调用链系统的核心......
  • 【教程】Objective-C 性能监控
     1、内存监控CPU内存监控克魔助手提供了分析内存占用、查看CPU实时活动数据以及追踪特定应用程序的功能,让开发者可以更好地了解应用程序的运行情况。以下是一些示例截图: ​    ​   ​  同样,克魔助手还提供了内存、GPU性能监控、网络监控等功......
  • 无涯教程-toLowerCase()函数
    此方法返回转换为小写的调用字符串值。toLowerCase()-语法string.toLowerCase()toLowerCase()-返回值返回转换为小写的调用字符串值。toLowerCase()-示例varstr="Applesareround,andApplesareJuicy.";console.log(str.toLowerCase())运行上面代码输......