常用的GCC编译命令

文/Edward

有些同学可能会疑问,之前我们还说我们的C语言编译器用的是一个叫做“MinGW”的软件,怎么到后来又出现了一个叫GCC的软件,这个GCC又是什么东西,然后就顿时一脸懵。GCC之前简单介绍过,它是用来开发GNU C语言的编译器,这个GNU C说的通俗易懂一些就是Linux底下的C语言开发,之前我们说了,目前市面上的C语言编译器,要么是完全不区分C语言和C++的MSVC,要么是老到掉牙的Borland C,但就Borland C来说吧,它支持的最多也就C89,而且可能还不完全支持,因此在开发的时候会很麻烦,也不建议用。剩下来的,就只有是每个版本的C语言支持都非常不错的GCC了。还有一个问题,GCC只是Linux操作系统下的一个编译器,难道我们还要为了一个编译器而放弃了人性化的Windows去安装一个不那么适合个人使用的Linux?因此GNU里面有一帮人不肯放弃Windows市场这么大的蛋糕,开发了MinGW这个软件,其实就是Windows底下的GNU C编译器,当然支持C++也是必须的。
大家没有IDE时候,可能一开始有点不习惯,但是坚持用一段时间,你就会爱上文本编辑器+编译器的模式了,不管是编译速度还是编译时的界面而言,这都方式都比IDE炫酷,毕竟再怎么样也是免费的,是吧。
这里再来讲一下终端,可能绝大多数同学以前只使用过Windows底下的“CMD”,即“命令提示符”,我还听过有人把它叫做DOS界面等等。而在Linux里面有一个长得差不多的东西,叫做终端,或者控制台等等。如图1所示。
图1 Windows下的“命令提示符”和Linux下的“终端”
看图1上的两张图片都是黑不溜秋的界面,两个东西难道不一样吗?其实啊,这两个是完全从设计哲学角度就不一样的东西。我们先来说终端,这个终端是Linux从Unix时代继承过来的产物,可能现在提到计算机,大家第一反应就是应该像笔记本或者台式机一样的东西,很小巧,每人一台在办公室办公。其实早期的计算机生成成本太贵,体积太大,都是以小型机或者大型机形式存在的,可能每个公司也就一台,其他用户都是使用串口插到这台大型机上面来工作的,他们面前只有一个叫做“终端”(或者控制台的设备,上面跑的程序叫做Shell)档或者其他办公,因此Unix最早期的设计哲学就是中心化数据处理的多用户多任务操作系统,而Linux完美继承了这一点。这种方式是不是有点类似于现在的服务器架构?这就是为什么,其他领域Windows都比Linux占优势,就是服务器领域这块蛋糕一直在Linux嘴里。后来由于Linux操作系统引入了GUI,而这些GUI都只是Linux系统里面的一个进程,真正的Linux还是那个终端。如图2所示。
图2 历史上的“终端
而Windows不一样,Windows诞生之初,个人电脑的业务就已经开始蓬勃发展,而他们最早为IBM PC开发的DOS系统叫做MS-DOS,当时有很多版本的DOS,微软的DOS只是其中一个,顺便说一下,DOS都是单用户,单任务操作系统,仅仅是为了用户操作磁盘里面的数据和软件而设计的。后来微软真正独领操作系统风骚的,是其推出了Windows,其实Windows界面和最早只是DOS里面的一个程序而已,用过Windows95的就知道,开完机电脑呈现给你的是一个命令行,要输入一长串命令才可以进入操作系统,这种机制直到Windows XP才被取消,Windows成为真正的Windows。理所当然,由于某些用户的习惯“DOS界面”下来了。
DOS和Shell的区别大致如下。
1,shell区分大小写,DOS不区分大小写;
2,一般而言,shell的命令的开关可以简写(比如说“-a -l“可以简写为“-al“),而DOS的则不允许;
3,在脚本编写上的语法差别极大,比如说:两者的流程控制语句语法不同,变量的语法不同等;
4,shell可以在UNIX、GNU/Linux和Win下(cygwin bash shell)工作,DOS则还没有听说过能在Win/DOS以外的系统中工作;
5,shell原生支持正则表达式,DOS则不是。
后来Windows 7之后,微软也在个人操作系统上面加入了一个叫做“Power shell”的软件,而我们之前VS Code里面自带的终端软件就是Powershell。以上就是Shell和命令提示符的介绍。
Shell命令在操作时,输入命令的格式为:命令参数1 参数2 … 参数n。来看之前常用的编译命令“gcc -o hello helloeorld.c”如图3所示。注意,在shell里运行GCC一定要区分所有大小写。
图3 GCC常用选项

GCC的参数功能还有很多,我们再一起来看几个。如图4所示,这个表只是罗列了几个常用的参数,如果有其他新参数需要使用,我们到时候再说。注意一下图3里面的参数1就是我后文中所说的“选项”,这两个是一回事情。
还是以之前的helloworld.c为例子,我们之前说到,一个程序的编译分成“预处理”->“编译”->“汇编”->“链接”这四个步骤,接下来我们用gcc一步步来看一下他们所产生的中间文件。
(1)只激活预处理,不进行后续三步,此时使用的命令应该为“gcc -E ./helloworld.c > propress.c”,这个功能需要将预处理完成之后的文件存储到一个新的文件里面,我们这里使用了“propress.c”这个名字。如图4所示。
图4 gcc预处理命令
(2)只做编译,不进行后续步骤。此时使用的命令应该为“gcc -S .\helloworld.c”,运行完成后,编译器会在当前文件夹里面输出一个名叫helloworld.s的文件,它就是GCC生成的汇编语言。如图5所示。
图5 gcc生成汇编语言文件
(3)只生成目标文件,不进行后续的链接步骤。此时使用的命令应该为“gcc -c .\helloworld.c”,运行完成后,编译器会在当前文件夹里面输出一个名叫helloworld.o的文件,它就是GCC生成的目标文件。如图6所示。VS Code一开始可能无法打开二进制文件,大家需要去应用市场自行下载一个叫“binary”的插件
图6 目标文件
(4)最后一步就是利用gcc生成最后的可执行文件,使用命令“gcc -o helloworld helloworld.c”最终会生成可执行文件helloworld.exe,注意此时的.exe后缀名是自动加上的,可以隐藏。
此外,如果大家对终端操作起来还是觉得不习惯,有一个叫做Dev Cpp的软件也是个集成MinGW的IDE,大家可以自己去尝试。
++++++书籍推荐++++++
推荐指数:

推荐理由:刚刚又朋友私信我,说学校的微机原理学不会,听不懂,那你一定要看看这么书,可以说是中国微机原理最好的一本书,没有之一.
(0)

相关推荐

  • gcc编译工具常用命令以及汇编语言

    文章目录 一.Linux GCC常用命令 二.GCC编译器背后的故事 总结 一.Linux GCC常用命令 1 新建一个文件test,代码如下: #include <stdio.h> in ...

  • 常用100条linux命令

    在这篇文章中跟大家分享一下接近 100 个 Linux 常用命令大全,希望可以帮助到大家. 1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 1 2 3 4 5 6 7 8 9 10 ...

  • 新手入门linux之最常用的20条命令

    前言 玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去 ...

  • 编程通用基础知识:常用批处理指令/DOS命令介绍

    在编程员的世界里,无论你是用哪一种语言进行编程,基本上都会涉及到批处理指令和DOS命令,本文将介绍一些最经常用到的批处理指令和DOS命令,即:`echo`.`@`.`::`.'rem'.'`pause ...

  • 常用的电脑CMD命令,学会了你也能成为他人眼中的电脑高手

    常用的电脑CMD命令,学会了你也能成为他人眼中的电脑高手

  • 做电脑网络维修维护工作常用的几个命令

    平时做电脑网络维修维护工作中用得比较多的几个命令总结: 如果有没想到的命令,朋友们多补充哈 1.Ping 命令 测tcp/ip是否安装好.网络畅通? Ping127.0.0.1 (ping 本机) p ...

  • gcc编译与gdb调试简要步骤

    http://blog.chinaunix.net/uid-24103300-id-108248.html 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定 ...

  • gcc编译和目标文件

    gcc编译和目标文件 1 基本概念 1.1 链接过程类型 1.2 目标文件形式 2 Gcc编译过程示例 2.1 示例代码 2.2 预处理 2.2.1 main.i 2.2.2 add.i 2.3 编译 ...

  • 10个常用的Windows运行命令分享

    对于熟悉Windows的老用户,相信很多人都有用过Windows运行命令,运行命令 Windows是我们访问计算机上文件和程序的按键快捷方式,我们可以用它来打开一些不在桌面上或者难以找到的程序,使用运 ...