程序翻译过程详解

这篇具有很好参考价值的文章主要介绍了程序翻译过程详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、快速认识gcc和g++

        gcc和g++都是编译器,C语言可以用gcc或者是g++来进行编译,但推荐使用gcc来进行编译。但C++语言只能用g++编译器来进行编译。

1.1语言和编译器的自举的过程

        为了更好地认识gcc和g++,在这里可以给大家介绍一下语言和编译器的自举的过程。在早期计算机刚产生的时候其实是只有二进制代码的,也只有用二进制代码写的编译器,直到后来有了汇编语言的诞生。但是汇编语言产生之初是没有可以编译汇编语言的编译器的,那怎么办呢?人们只好先用二进制语言写一个汇编编译器,这样才可以编译汇编代码。汇编代码可以在用二进制语言写的汇编编译器上运行以后,也就意味着人们可以使用汇编代码写程序进而写软件了,这时用汇编代码写的汇编编译器(编译器同样是一款软件)也就应运而生了。同样的道理,C语言刚产生的时候,同样没有用C语言写的C语言编译器,只有用汇编语言写的C语言编译器,后来才可以用C语言来写C语言编译器。从此以后,C语言就可以用C语言来编译了,这就叫语言的自举过程。

1.2语言的翻译过程

        从上面语言的自举过程我们可以看到,语言的翻译过程是分阶段的。也就是说,假设要将C语言翻译成二进制语言,绝不是一步到位地直接将C语言直接翻译成二进制语言,一定是先将C语言翻译成汇编语言,再将汇编语言翻译成二进制语言。因为将C语言翻译成汇编语言,将汇编语言翻译成二进制语言这两个工作在语言的发展过程中前人所写过的编译器已经可以实现这两个功能,所以说语言的翻译过程一定是分阶段的,所以也就有了预处理,编译,汇编,链接这几个步骤。

二、程序的翻译过程

1、预处理

1.1头文件展开

所谓的头文件展开,其实在预处理阶段的时候,将头文件的内容拷贝至源文件当中。

1.2去注释

1.3宏替换

1.4条件编译

ifdef,elif,endif

-D选项可以动态地给代码增加条件,实现条件编译

程序翻译过程详解,linux,运维,服务器

预处理完C语言程序还是C语言程序。

程序翻译过程详解,linux,运维,服务器

gcc -E C文件名 -o 所形成的文件的文件名,-E的意思就是从现在开始程序的翻译过程,当预处理阶段做完的时候就停下来。

2、编译

程序翻译过程详解,linux,运维,服务器

-S的意思就是从现在开始程序的翻译过程,当编译阶段做完的时候就停下来。编译完形成的文件就是汇编代码了。

3、汇编

程序翻译过程详解,linux,运维,服务器

-c的意思就是从现在开始程序的翻译过程,当汇编阶段做完的时候就停下来。汇编过程形成的.o文件叫可重定位二进制文件,这个二进制文件是不能执行的,需要经过链接过程才能形成可执行程序。

4、链接

程序翻译过程详解,linux,运维,服务器

链接就是可以形成可执行程序。我们需要知道的是,平台要支持开发,就必须提前在系统中安装好语言的头文件和库文件, 链接的实质就是将我们自己写的程序所形成的.o文件同系统提供的静态库或动态库中的.o文件链接起来形成可执行程序

三、动静态库的理解

动静态库其实就是一系列.o文件。

动态库:.so,用于动态链接

静态库:.a,用于静态链接

        静态链接:将自己需要的代码直接拷贝到自己的可执行程序中。所以说,允许你进行拷贝的库就叫做静态库,拷贝完以后我的可执行程序就不需要再依赖于库了。静态库的优点就是不需要再依赖于库,程序在同类型平台中都可以直接运行使用。缺点也是比较明显的,就是可执行程序的体积会比较大,比较占据资源(磁盘资源,网络资源,内存资源)。

程序翻译过程详解,linux,运维,服务器

        动态链接:允许你进行链接的库就叫做动态库。可执行程序依据编译器所给出的动态库的地址去动态库中找到相应的方法进行链接,这个过程就叫做库调用。找到以后进行函数返回,链接完成后可执行程序就可以运行了。动态库的优点就是比较节省资源,不同的程序中不会出现过多重复的代码。缺点就是一旦库丢失,所有依赖于该库的程序就都不能运行了。

程序翻译过程详解,linux,运维,服务器

        gcc -o 所形成的文件的文件名   C文件名这条指令默认是使用静态链接的,如果想使用静态链接形成可执行程序,要使用gcc -o 所形成的文件的文件名   C文件名 -static这条指令。动态链接是gcc的默认行为,文章来源地址https://www.toymoban.com/news/detail-799130.html

到了这里,关于程序翻译过程详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Linux本地部署1Panel服务器运维管理面板并实现公网访问

    1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等 下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理界面 执行如下命令一键安装 1Panel: 安

    2024年02月04日
    浏览(97)
  • Linux搭建Ngrok服务器详细过程

    1.安装go语言并解压到/usr/local/目录下,目录可以自己换别的,go语言版本也可以换高级点的 2.配置go语言的环境变量 1)打开配置文件 2)在最下面新增以下代码 3)重新加载配置文件 3)验证go是否安装成功 结果显示版本信息就表示安装成功 1) 使用大佬已处理好依赖的ngrok文

    2023年04月25日
    浏览(52)
  • TCP服务器的演变过程:C++使用libevent库开发服务器程序

    手把手教你从0开始编写TCP服务器程序,体验开局一块砖,大厦全靠垒。 为了避免篇幅过长使读者感到乏味,对【TCP服务器的开发】进行分阶段实现,一步步进行优化升级。 在上一章节介绍了如何使用epoll构建reactor网络模型开发高效的服务器,有了上一节的基础,本节将介绍

    2024年01月23日
    浏览(53)
  • [1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

    本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于docker的,想法很先进。官方还提供了视频的使用教程,本期为大家按照本专栏的基本内容进行多方面的测评。

    2024年02月07日
    浏览(93)
  • Linux环境下部署项目到服务器完整过程

    1,首先,选择一款云上服务器(这里用的是腾讯云),右侧搜索栏输入云服务器或轻量服务器(这里用的轻量服务器),立即选购 2,选择自己要的服务器配置,系统镜像选择Centos即可 3,实例创建成功后,点击控制台搜索请量服务器找到新创建的实例重置密码 4,点击防火墙

    2024年02月02日
    浏览(46)
  • 【运维知识进阶篇】zabbix5.0稳定版详解1(安装+部署+添加服务器+拆分数据库)

    本篇文章介绍zabbix监控,监控是对我们操作系统进行不间断的监控,这是软件生命周期非常重要的一环,可以做到事前告警,事后根据监控内容排查问题(金丝雀,监控重要指标),有问题的时候,运维需要管理运维债务(在软件开发过程中积累的一些技术债务) 目录 监控

    2024年02月04日
    浏览(46)
  • VMware虚拟机,Linux DHCP服务器配置过程。

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 一、实验目标(以自身情况为准) 二、所需配置 三、静态IP配置 四、配置DHCP服务器 五、配置DHCP中继 六、防火墙配置 配置 DHCP服务器 与 中继 ,使多个子网的客户机可以通过服务器获取 动态IP地址 。

    2024年02月08日
    浏览(57)
  • Linux服务器常见运维性能测试(3)CPU测试super_pi、sysbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月02日
    浏览(54)
  • 华为云云耀云服务器L实例评测 | Linux系统宝塔运维部署H5游戏

    本章节内容,我们主要介绍华为云耀服务器L实例,从云服务的优势讲起,然后讲解华为云耀服务器L实例资源面板如何操作,如何使用宝塔运维服务,如何使用运维工具可视化安装nginx,最后部署一个自研的H5的小游戏(6岁的小朋友玩的很开心😁)。 前端的同学如果想把自己

    2024年02月07日
    浏览(58)
  • Python 与机器学习,在服务器使用过程中,常用的 Linux 命令包括哪些?

    🍉 CSDN 叶庭云 : https://yetingyun.blog.csdn.net/ 本博客旨在分享在实际开发过程中,开发者需要了解并熟练运用的 Linux 操作系统常用命令。Linux 作为一种操作系统,与 Windows 或 MacOS 并驾齐驱,尤其在服务器和开发环境中占据重要地位。Linux 命令,简而言之,就是指导计算机执行

    2024年04月12日
    浏览(59)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包