【Linux】Linux编辑器-gcc/g++使用

这篇具有很好参考价值的文章主要介绍了【Linux】Linux编辑器-gcc/g++使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、背景知识

二、gcc是如何完成的

  1、预处理(进行宏替换)

  2、编译(生成汇编)

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

  4、链接(生成可执行文件或库文件)

     4.1、静态库

     4.2、动态库

     4.3、动静态库的比较 

三、gcc常见的选项

 


一、背景知识

计算机是二进制读取文件的,我们写好代码是经过编译,链接,然后形成可执行程序。
1、预处理(进行宏替换);
2、 编译(生成汇编) ;

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

4、连接(生成可执行文件或库文件) .

二、gcc是如何完成的

  1、预处理(进行宏替换)

  • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
  • 预处理指令是以#号开头的代码行。
  • 实例: gcc –E hello.c –o hello.i
  • 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
  • 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

如下是Linux运行结果:

【Linux】Linux编辑器-gcc/g++使用

并且生成如下的test.i的文件,

【Linux】Linux编辑器-gcc/g++使用

可以看出在test.i文件中的注释已经去掉,宏已经被替换了。 

  2、编译(生成汇编)

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

【Linux】Linux编辑器-gcc/g++使用

此时又生成一个test.s的文件,

【Linux】Linux编辑器-gcc/g++使用

虽然看的不太懂,但是我们经过前段时间的学习,大概能够看出这是汇编代码。

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

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

【Linux】Linux编辑器-gcc/g++使用

此时已经将汇编代码转换成了“.o”的二进制目标代码了。

注意:此时还没有进行链接,所以是不可执行的。

【Linux】Linux编辑器-gcc/g++使用 

  4、链接(生成可执行文件或库文件)

  • 在成功编译之后,就进入了链接阶段。
  • 实例: gcc hello.o –o hello.

【Linux】Linux编辑器-gcc/g++使用

链接之后生成了可执行文件,此时就可以运行了。

链接:

  • 静态链接:编译器的链接器此时会将我们的程序以静态链接的形式与静态库进行链接。
  • 动态链接:编译器的链接器此时会将我们的程序以动态链接的形式与动态库进行连接。

执行 ldd + test 命令可以看出是静态链接还是动态链接 。

【Linux】Linux编辑器-gcc/g++使用

可以看出是动态链接。Linux下:动态库是以.so结尾的,静态库是以.a结尾的。

下面接着介绍一下动静态库:

     4.1、静态库

  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也 就不再需要库文件了。其后缀名一般为“.a”
  • 实例:gcc test.c -o test-static -static

【Linux】Linux编辑器-gcc/g++使用

可以看出静态链接和动态链接的文件大小差距还是很大的,静态链接生成的文件比较占用空间。

静态库的命名为:libXXX.a

  • lib 是前缀
  • .a 是后缀
  • XXX 是真正的库

通过file 命令可以查看详细信息

【Linux】Linux编辑器-gcc/g++使用

静态链接 : 因为是直接将需要的代码拷贝到程序中,因此最终生成的文件会变大,比较占空间。 

     4.2、动态库

  • 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时 链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态 库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc hello.o –o hello;
  • gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证。

静态库的命名为:libXXX.so

  • lib 是前缀
  • .so 是后缀
  • XXX 是真正的库

【Linux】Linux编辑器-gcc/g++使用

动态链接 :主要依赖不同函数在库中的位置信息进行调用,只有一份代码库,比较节省空间。

    4.3、动静态库的比较 

静态库:

    优点:(1)所需函数直接拷贝至程序中,运行速度快;(2)程序运行不依赖库,便于移植。

    缺点:(1)如果将函数进行修改,需要重新进行编译;(2)同一份代码可能出现重复拷贝的情况,浪费空间。

动态库:

    优点:(1)可以实现不同进程间的资源共享;(2)对于函数的修改只需要替换动态库文件即可,不需要重新编译程序。

    缺点:(1)需要调用函数,运行速度较慢;(2)程序运行需要依赖动态库。

三、gcc常见的选项

  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面;
  • -S  编译到汇编语言不进行汇编和链接;
  • -c  编译到目标代码;
  • -o 文件输出到 文件;
  • -static 此选项对生成的文件采用静态链接;
  • -g 生成调试信息。GNU 调试器可利用该信息;
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库;
  • -O0;
  • -O1;
  • -O2;
  • -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高;
  • -w  不生成任何警告信息;
  • -Wall 生成所有警告信息.

 


本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

【Linux】Linux编辑器-gcc/g++使用 文章来源地址https://www.toymoban.com/news/detail-447608.html

老铁们,记着点赞加关注!!! 

到了这里,关于【Linux】Linux编辑器-gcc/g++使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [linux初阶][vim-gcc-gdb] OneCharter: vim编辑器

    目录 一.vim编辑器基础 ①.vim的语法 ②vim的三种模式 ③三种模式的基本切换  ④各个模式下的一些操作  二.配置vim环境  ①手动配置(不推荐)  ②自动配置(推荐) vim是vi的升级版,包含了更加丰富的功能. vim [文件名] 命令模式 插入模式   底行模式  如图: 命令模式: shift + 4: 光

    2024年04月17日
    浏览(49)
  • 嵌入式-vim编辑器 gcc编译器

    目录 一.vim编辑器 1.1简介 1.2使用说明 1.2.1复制、粘贴与删除 1.2.2保存 二.gcc编译器 2.1基本介绍 2.2编译原理

    2024年02月09日
    浏览(48)
  • Linux开发工具大全 - 软件包管理器yum | vim编辑器 | gcc/g++编译器 | 自动化构建工具Make/Makefile | gdb调试工具

    目录 Ⅰ.  Linux 软件包管理器 yum 一、yum 背景知识 二、yum 的基本使用 1、查看软件包 2、软件包名称构成 3、安装软件 4、卸载软件 Ⅱ.vim编辑器  一、认识vim 1、vim概念  2、模式及其切换  二、vim使用 1、vim的指令(重要)  命令模式 插入模式 底行模式 2、vim配置 Ⅲ.gcc/g++编

    2024年02月05日
    浏览(55)
  • idea设置编辑器背景颜色

    在File-Settings-Editor-Color Scheme-General 豆沙绿:R:199, G: 237, B:204 给所有新打开项目配置maven默认配置目录和本地仓库目录 给所有新打开项目配置jdk等配置 :encoding :serialVersionUID

    2024年01月19日
    浏览(77)
  • Linux:概述 、安装 、文件与目录结构 、vim编辑器 、网络配置 、远程登录 、系统管理 、基础命令 、软件包管理 、克隆虚拟机 、shell编程

    2.1.1、Linux是什么? Linux是一个操作系统(OS) 所谓的操作系统就是直接用来操作计算机底层硬件的软件。 2.1.2、Linux的出现 官网: https://www.centos.org/ 进入官网进行下载 有很多的镜像,以阿里云的为例: 3.3.1、下载 官网: https://www.vmware.com/ 这是下载的企业版,30天试用期,可

    2024年02月05日
    浏览(65)
  • Visual Studio 设置编辑框(即代码编辑器)的背景颜色

    在Visual Studio 中设置编辑框(即代码编辑器)的背景颜色,可以按照以下步骤进行: 打开Visual Studio。 在菜单栏上找到并点击“工具”(Tools)选项。 在下拉菜单中选择“选项”(Options)。 在“选项”对话框中,导航至“环境”(Environment)类别。 在环境类别中,点击“字体和颜色”

    2024年01月21日
    浏览(61)
  • 【Linux编辑器-vim使用】

    目前了解的vim有三种模式(其实有好多模式),分别是命令模式、插入模式和底行模式,各模式的功能区分如下: 命令模式(Normal mode) 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode 插入模式(Insert mode) 只有在Insert mode下

    2024年02月10日
    浏览(44)
  • Linux编辑器-vim使用

            vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows。  1. vim的基本概念         vim有三

    2024年02月06日
    浏览(46)
  • Linux编辑器 - vim使用

    Vim是一个广泛使用的文本编辑器,它是在Unix和Linux系统中常用的命令行文本编辑器之一。 vim的主要三种模式 ( 其实有好多模式,目前掌握这 3 种即可 ), 分别是 命令模式 ( command mode )、 插入模式 (Insert mode )和 底行模式 ( last line mode ),需要掌握每种模式的用法和差别

    2024年02月14日
    浏览(61)
  • VsCode与Idea编辑器更换背景图

    目录 VsCode Idea VsCode 需要安装background插件 安装完成后,打开设置,搜索background 然后就可以在json文件进行图片设置,透明度等等 Idea 打开File - Settings  然后找到Appearance , 往下滑,找到BackGround Image,点击  然后就会弹出背景设置的弹窗

    2024年02月14日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包