如何在搭建好的Linux开发环境中开发C/C++

如何搭建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/-vg++ --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

在这里插入图片描述
成功执行。

猜你喜欢

转载自blog.csdn.net/mahoon411/article/details/113245897