【Linux编译器】gcc/g++的使用

目录

1.快速查看

在我们使用Linux的过程中,编译代码也是一项非常重要的功能。一般情况下,我们会使用gcc 和 g++ 来完成代码的编译。我们先来快速查看一下。
在这里插入图片描述

在这里插入图片描述
我们先创建一个code.cc文件,编译好自己的代码,然后用g++编译一下,就会形成a.out文件,这就是我们的可执行文件。然后./a.out编译文件,就编译成功了。

细节问题

  1. .cpp 和 .cc 和.cxx是c++文件的结尾
  2. gcc只能用来编译c语言,而g++都可以。
  3. Linux系统中后缀没有意义,但是编译器编译的时候还是会根据文件的类型来决定编不编译的。

2.背景知识

我们的计算机语言是经历了一个发展的过程的,从刚开始的二进制打孔,然后产生了汇编语言,再产生c语言。语言和编译器存在一个自举的过程。
在这里插入图片描述

3.程序的翻译工作

程序的翻译过程分为:预处理,编译,汇编,链接4大部分。

预处理

  1. 预处理过程中,首先会对代码中的头文件进行展开,就是把头文件中的内容拷贝到代码中
  2. 预处理会帮我们把注释全部清除
  3. 代码中的宏都会被替换成相应的代码
  4. 预处理会完成代码中的条件编译。

实例:

gcc -E hello.c -o hello.i

选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序
在这里插入图片描述

编译

  • 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
  • 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。

实例:

 gcc –S hello.i –o hello

汇编(生成机器可识别代码)

  • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件
  • 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了

实例:

 gcc –c hello.s –o hello.o

链接

  • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件
  • 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了

实例:

gcc –c hello.s –o hello.o

在这里插入图片描述

上面的内容我们知道就可以了,平时我们只需要直接用gcc 和 g++ 编译就行了。
还要记住文件的后缀是ESc 和 iso

在这里插入图片描述

4.动静态库

我们所写的代码都是站在巨人的肩膀上,已经有人跟我们写好了对应的可以直接使用的函数了,这些函数在哪里呢?就在我们的库中。

程序进行汇编形成 .o 文件后要跟库进行链接,才能形成可执行文件。
通过ldd指令,就可以看到我们的文件链接的库是哪个了。

动态库以 .so 结尾。静态库以 .a 结尾。 库都是以lib开头的
libc.so.6库去掉前后缀,就是它真正的名字了就是 c 库。
在这里插入图片描述
所以我们的开发环境安装就是:下载拷贝头文件和库文件到开发环境的特定路径下,一定要能被编译器找到。

动态库

动态库就相当于网吧,当你去上网的时候就是链接的过程。并且很多人都可以去上网,所以动态库也叫做共享库。动态库一旦缺失,会影响动态库的所有程序。

静态库

静态库就相当于你在自己家里安装了一台电脑,想玩电脑直接翻个身就可以了。所以静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了
在这里插入图片描述

动静态库的优缺点

动态链接是我们程序的默认链接方式,它比较节省资源
在这里插入图片描述

相关推荐

  1. Linux编译器-gcc/g++使用

    2024-04-15 06:54:03       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-15 06:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-15 06:54:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-15 06:54:03       82 阅读
  4. Python语言-面向对象

    2024-04-15 06:54:03       91 阅读

热门阅读

  1. 嵌AR/VR开发教程和案例

    2024-04-15 06:54:03       29 阅读
  2. [MAC] mac电脑更新 git的安装homebrew

    2024-04-15 06:54:03       38 阅读
  3. zustand状态库在react类组件中使用

    2024-04-15 06:54:03       36 阅读
  4. Day8-Python基础学习之地图和柱状图构建

    2024-04-15 06:54:03       38 阅读
  5. 【入门】图的dfs遍历

    2024-04-15 06:54:03       35 阅读
  6. List和Map的几种初始化方法

    2024-04-15 06:54:03       41 阅读
  7. Qt 窗⼝

    Qt 窗⼝

    2024-04-15 06:54:03      30 阅读
  8. Kali安全

    2024-04-15 06:54:03       35 阅读
  9. 数据库常用语句复建链接记录 枚举类型转换语义

    2024-04-15 06:54:03       39 阅读