如何搭建Linux开发环境请参见:Linux开发环境搭建;在Window系统中通过虚拟机安装Linux系统(Ubuntu)
1. 安装GCC编译套件
1.1 什么是GCC
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器(编译器)。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)
GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。
GCC不仅支持C的许多“方言”,也可以区别不同的C语言标准;可以使用命令行选项来控制编译器在翻译源代码时应该遵循哪个C标准。例如,当使用命令行参数-std=c99
启动GCC时,编译器支持C99标准。
1.2 安装GCC编译套件
首先通过Xshell连接到Linux服务器。
输入命令sudo apt install gcc g++
,点击回车,执行命令。
开始安装。
安装完成。
输入gcc --version/-v
和g++ --version/-v
查看安装版本。
小提示:在Xshell中的命令行处按Ctrl+L可以清空命令行。
2. 利用gcc/g++进行编译链接执行
2.1 新建并编辑一个.c文件
新建.c文件有两种方法。
2.1.1 通过Xshell利用vim编辑器创建.c文件
首先进入用户目录下的Linux文件夹内。
利用命令touch test.c
新建一个.c文件。
输入命令vim test.c
进行代码编辑。默认进入命令模式。
输入i进入输入模式,就可开始写入代码了。
vim命令见博客:Linux vi/vim命令大全
编辑完代码后,按esc,进入命令模式,然后输入:wq
,即在底线命令模式中,退出并保存当前文件。
可以使用命令cat test.c
来查看文件内容。
至此就完成了test.c代码的编写。
2.1.2 使用VS Code创建.c文件
通过VS Code远程连接至Linux服务器,通过explorer打开用户目录下的Linux文件夹。在Linux文件夹内新建一个名为test02.c的文件。
(注:如何通过VS Code远程连接至Linux服务器参见博客:Linux开发环境搭建)
输入代码并保存test02.c文件。
至此就完成了test.c代码的编写。
2.1.3 通过VS Code利用vim编辑器创建.c文件
通过VS Code创建.c文件时,同样也可以使用vim编辑器创建.c文件。
先点击下面的叉符号,然后点击TERMINAL。
如此,便进入了终端,在这里就可以利用vim编辑器创建.c文件。
由于操作和在Xshell中的操作一样,因此直接给出结果。
2.2 对.c文件进行编译链接
在终端中输入命令gcc test03.c -o app
,并按回车执行,下图中的绿色的app
就是test03.c
编译链接之后生成的文件。
其中-o是为了指定输出文件名,使用格式为gcc filename -o output_filename
,确定输出文件的名称为output_filename
,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out
。
提示:Linux系统中可执行的文件的颜色用绿色表示
2.3 执行编译链接后的文件
在终端输入命令.\app
,然后按回车执行。
3. gcc工作流程
下图为gcc常用参数选项。
gcc编译选项 | 作用 |
---|---|
-o [file] | 指定输出文件的文件名为file。无论是预处理、编译、汇编还是链接,这个选项都可以使用。 |
-E | 预处理指定的源文件,不进行编译。 |
-S | (预处理并)编译指定文件,不进行汇编。(即对.c文件进行-S操作时,既预处理又编译;对.i文件进行-S操作时,只进行编译。) |
-c | 预处理、编译和汇编源文件,但是不进行链接。(类比-S) |
-I directory | 指定include包含文件的搜索目录 |
-g | 在编译的时候,生成调试信息,该程序可以被调试器调试 |
-D | 在程序编译的时候,指定一个宏 |
-w | 不生成任何警告信息 |
代码示例:
首先创建一个hello.c的文件。
第一步,对hello.c文件进行预处理,生成hello.i文件。
gcc hello.c -E -o hello.i
生成的hello.i文件如下图所示。
可以看出,hello.i的行数相比于hello.c明显增加了,这是因为经过预处理后,头文件的内容被包含进来;PI变成了3.14,这是因为预处理后,宏定义被替换了;并且预处理后,原来程序的注释也被删除了。
第二步,对预处理文件hello.i进行编译,生成汇编文件hello.s。
gcc hello.i -S -o hello.s
生成的hello.s文件如下图所示。
可见,生成的是汇编代码。
第三步,对汇编文件hello.s进行汇编,生成可重定位目标文件(OBJ文件)hello.o。
gcc hello.s -c -o hello.o
打开的话,如下图所示。
可见,生成的hello.o,即生成的目标文件(OBJ文件)是二进制代码。
第四步,进行链接。假设此时有另外一个目标文件main.o,对这两个目标文件进行链接,生成可执行文件hello。
gcc hello.o main.o -o hello
由于没有main.o,因此我们执行以下代码,生成可执行文件hello。
gcc hello.o -o hello
可见,生成的可执行程序hello,也是二进制文件。
当然,想直接生成可执行文件有更简单的操作。如下代码所示,直接对源代码hello.c进行编译链接,生成可执行目标文件。
gcc hello.c -o hello
第五步,执行可执行程序。
./hello
成功执行。