Linux gcc编译c/c++基本过程

12 篇文章 0 订阅

Linux系统下开发c++程序,那么gcc编译器就是我们绕不过去的一道坎。gcc是GNU出品的一款可以在多种硬件平台上编译处可执行程序的超级编译器,其执行效率比普通的编译器要高出20%~30%左右,而且它是开源,因此很多著名的软件都能通过它进行编译。

对于我们来说,有时候尽管写着linux c++的代码,但是很多时候我们不会去深究其中的深层次东西。向我这样拥有着最低追求的程序员,能够写出符合要求的代码可能就算完事了。不过呢,多知道一些东西总归是有好处的。知道其原理,我们才能更好的写出高质量的代码,更好的提高我们的工作效率。

gcc编译C/C++的编译过程可以分为4个阶段:

1.预处理(Preprocess:生成 .i 的文件
2. 编译(Compilation):将预处理后的文件不转换成汇编语言, 生成文件 .s 
3. 汇编 (Assembly:由汇编变为目标代码(机器代码)生成 .o 的文件
4. 链接(Linking):连接目标代码, 生成可执行程序 

预处理

预处理其实就是对程序中的伪指令(#开头的指令)和特殊符号进行处理的过程。
其中伪指令包括宏定义指令、条件编译指令以及头文件包含指令。

预编译过程中的主要处理规则如下:

1.删除#define定义,并且展开所有的宏定义
2.处理所有的条件编译指令,如#ifdef...
3.处理#include指令 ,将被包含文件插入到指令位置,实质上和宏定义一样,只不过这里是展开文件内容
4. 删除源代码中的注释 
5. 添加行号以及标识

那么,我们还是以HelloWorld程序作为我们的示例程序吧。

这里我么就不用集成IDE了,我们直ssh到我们的linux机器。

首先我们找一个目录,然后编写一个helloWorld程序:

//编辑代码
vi hello.c

// 查看文件内容
 ls
hello.c

// -n 参数可以显示行号
cat -n hello.c
     1  #include <stdio.h>
     2
     3  //函数入口
     4  int main(int argc, char *argv[])
     5  {
     6      // 打印欢迎语句
     7      char hello[] = "Hello,Linux C++!";
     8      printf("%s",hello);
     9      return 0;
    10  }

接下来我们执行gcc的预处理命令:

gcc -E hello.c -o hello.i

可以看到目录下会生成hello.i 文件:
在这里插入图片描述

我们可以查看一下hello.i的内容:
在这里插入图片描述
可以看到,include被替换,注释被删除了。。。

编译

编译过程就是把预处理完成的文件进行一系列的词法分析,语法分析。。。然后生成对应的汇编文件。默认情况gcc不会生成后缀为.s的汇编文件,如果需要我们需要使用-S选项。

语法:

gcc -S hello.i -o hello.s

生成的汇编文件代码,这里我贴出来,说实话看不太懂。。。
在这里插入图片描述

汇编

汇编就是将汇编代码转化为机器可以执行的二进制代码。

语法:

gcc -S hello.s -o hello.o

至于查看hello.o可以使用下面的命令:

hexdump hello.o

在这里插入图片描述
hello.o是二进制文件。

链接

这个阶段主要是为了解决多个文件之间的符号引用的问题。
就拿hello.c来说,我们在程序中使用了printf函数,但是我们并没有其声明和实现。可能有朋友会说,我们不是引用了stdio.h吗?是的,我们确实在我们的文件中引用了头文件,可问题是头文件中也只会有printf的声明,而在实际的运行中,我们需要函数的实现。所以我们可以将链接这个过程描述为:我知道你是谁,但我们要明确你在哪里?

gcc会在系统默认的搜索路径:/user/lib64 下去查找。
在这里插入图片描述

语法:

 gcc hello.o -o hello 

最后运行:

./hello

在这里插入图片描述
我也没有详细的研究过相关知识,这里讲的难免会有偏差,只是知道这几个过程大体是在做什么,更多的内容还是建议大家找一些官方权威资料学习。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于在Linux上配置C/C++环境并使用VS Code进行开发,你可以按照以下步骤进行操作: 步骤 1:安装GCC和G++编译器 首先,确保你的系统中已经安装了GCC和G++编译器。你可以通过在终端中运行以下命令来检查它们是否已安装: ``` gcc --version g++ --version ``` 如果命令返回了版本信息,则说明已经安装好了。如果没有安装,你可以通过运行以下命令来安装它们: ``` sudo apt-get update sudo apt-get install build-essential ``` 步骤 2:安装VS Code 访问VS Code的官方网站(https://code.visualstudio.com/)并下载适用于Linux的版本。选择合适的包(.deb或.rpm),然后按照安装向导进行安装。 步骤 3:安装C/C++扩展 在VS Code中,点击左侧的扩展图标(四个方块),搜索并选择 "C/C++" 扩展进行安装。 步骤 4:创建C/C++项目 在VS Code中,打开一个文件夹,然后点击菜单栏的 "文件" -> "新建文件夹",为项目创建一个新的文件夹。 步骤 5:配置编译器路径 打开VS Code的设置(快捷键:Ctrl + ,),在搜索框中输入 "C/C++",找到 "C/C++: Edit Configurations (UI)" 选项并点击。在弹出的窗口中,点击 "C++",然后再点击 "g++"。在 "compilerPath" 字段中,填入你的GCC编译器的路径。通常情况下,它应该是 "/usr/bin/g++"。 步骤 6:创建C/C++源文件 在项目文件夹中,右键点击空白处,选择 "新建文件" -> "新建文件"。在文件名后面加上 ".cpp" 后缀,比如 "main.cpp"。然后,在文件中编写你的C/C++代码。 步骤 7:编译和运行 在VS Code中,按下快捷键 "Ctrl + ` " 打开集成终端。在终端中输入以下命令来编译你的代码: ``` g++ -o output_filename source_filename.cpp ``` 将 "output_filename" 替换为你想要的输出文件的名字,将 "source_filename.cpp" 替换为你的源代码文件名。 然后,在终端中运行以下命令来执行你的程序: ``` ./output_filename ``` 这样就可以在终端中看到你的程序的输出了。 希望这些步骤能够帮助你在Linux上配置C/C++环境并使用VS Code进行开发!如果有任何问题,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值