【Linux】程序的编译过程

 程序的翻译过程

  • 预处理(头文件展开,条件编译,宏替换,去注释)
  • 编译 :把c变成汇编语言
  • 汇编 :把汇编变成二进制(不可执行,二进制目标文件)
  • 链接 :把自己写的代码和c标准库中的代码合起来 ---链接的过程

头文件最大的意义:

  • 写代码
  • 支持代码自动补齐

预处理之前:

预处理之后:

选项的含义

gcc -字母 test.c -o test.后缀

  • -o 指形成的临时文件名称
  • -E是表示从现在开始进行程序的翻译到预处理结束就停下来(.i)
  • -S 做完汇编工作就停下来(.s)
  • -c 把汇编语言转化为可重定向二进制目标文件(.o)
  • gcc test.o -o mytest.out 链接的过程生成可执行的二进制程序(库+你的代码)
  • ESc -> iso(镜像)

补充:

  • 批量化注释 CTRL+V 然后 j/k两个按键上下选中区域 然后 shift+i(l) 最后 // 加Esc
  • 批量化删除注释:CTRL V ->hjkl选中区域 -> d即可
  • Linux系统中文件后缀没有意义,但是gcc这个软件要求文件后缀名是.c/.cpp

动态链接静态链接

        链接的本质就是我们调用库函数的时候和标准库如何进行关联的问题?

  • 前三步是对我们自己写的代码进行处理,我们自己写的代码和库是两码事。
    • C标准库 是 别人已经给我们准备好的,让我们直接使用的。我们所以使用库中函数的代码例如(printf..),其中我们只写了对于该函数的调用,没有对应的实现!只有在 链接的时候,对应的实现,才和我们的代码关联起来。


动态链接

  • 动态库是C/C++或者其他第三方提供的所有方法的集合,被所有程序 以:链接的方式,关联起来
  • 静态库是C/C++或者其他第三方提供的所有方法的集合,被所有程序 以拷贝的方式,将需要的代码,拷贝到自己的可执行程序中!
  • 动态链接优缺点:
    • 优点:形成的可执行程序体积比较小,比较节省资源的!
    • 缺点:稍慢一些,强依赖动态库,动态库没了,所有的依赖这个库的程序都无法运行了
  • 静态链接优缺点:
    • 优点:无视库,可以独立运行
    • 缺点:体积太大,浪费资源
为什么系统一般不会自带静态库,而选择动态库呢?
  • 编译器默认链接的方式是动态链接

默认情况下,你们的云服务器是没有安装c静态库的,只有动态库,如果你要安装

  • C语言的静态库:sudo yum install glibc-static
  • C++的静态库:sudo yum install -y libstdc++-static

系统本身为了支持我们编程需要给我们提供

  • 标准库的.h(告诉我们怎么用)
  • 标准的动静态库 .so/.a(告诉我们需要去哪找到方法)

我的代码+库的代码 = 可执行程序

补充:

  • windows下原理一样 动态库 .dll 静态库 .lib
  • 与Linux一样,编译器默认链接的方式是动态链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Trunk链路操作题

Trunk链路操作题 论证:

【计算机网络】实验7:默认路由和特定主机路由以及路由环路问题

实验 7:默认路由和特定主机路由以及路由环路问题 一、 实验目的 了解默认路由以及特定主机路由。 了解静态路由配置错误导致的路由环路问题。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、默认路由以及特定主机路由 (1) 第一步&#xff…

特殊的数学性质

一个数模9的结果等于它的每一位数相加和模9

JSP知识点总结

jsp九大对象 在jsp中内置了9个对象,无需创建该对象即可使用。其名称为固定名称。 1.out输出对象 - 属于JspWriter print(): 输出 flush(): 刷新 close(): 关闭 2.request请求对象 - 属于HttpServletRequest getParameter(): 获取请求的参数 setCharacterEncodin…

电子信息工程自动化 基于单片机的居室安全报警系统

摘要 本课题设计了基于STM32F103C6T6单片机为主控核心的居室安全报警系统。为了解决家庭居室的安全监控,通过温湿度芯片SHT30、烟雾传感器MQ-2、天然气传感器MQ-4来获取居室的温湿度、烟雾、天然气含量,使用了一个热释电传感器、菲涅耳透镜、红外传感信…

【vue3 for beginner】Pinia基本用法:存储user的信息

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 Pinia 简介 Pinia 是一个用于 Vue.js 应用的状态管理库,是 Vuex 的…

使用Goland对6.5840项目进行go build出现异常

使用Goland对6.5840项目进行go build出现异常 Lab地址: https://pdos.csail.mit.edu/6.824/labs/lab-mr.html项目地址: git://g.csail.mit.edu/6.5840-golabs-2024 6.5840运行环境: mac系统 goland git clone git://g.csail.mit.edu/6.5840-golabs-2024 6.5840 cd 6.5840/src…

React基础知识四 Hooks

什么是hooks? (coderwhy) hooks是react 16.8(2019年)出的新特性。 react有两种形式来创建组件——类式和函数式。在hooks之前类式组件就是react最主流的编程方式。 这个时候,函数式组件是非常鸡肋的,几乎没什么用。因…

电子病历静态数据脱敏路径探索

一、引言 数据脱敏(Data Masking),屏蔽敏感数据,对某些敏感信息(比如patient_name、ip_no、ad、no、icd11、drug等等 )通过脱敏规则进行数据的变形,实现隐私数据的可靠保护。电子病历作为医疗领…

AIGC 012-Video LDM-更进一步,SD作者将LDM扩展到视频生成任务!

AIGC 012-Video LDM-Stable Video diffusion前身,将LDM扩展到视频生成任务! 文章目录 0 论文工作1论文方法实验结果 0 论文工作 Video LDM作者也是Stable diffusion的作者,作者在SD的架构上进行扩展,实现了视频的生成。后续在Vid…

ABAP DIALOG屏幕编程1

一、DIALOG屏幕编程 DIALOG屏幕编程是SAP ABAP中用于创建用户交互界面的一种技术,主要用于开发事务性应用程序。它允许用户通过屏幕输入或操作数据,程序根据用户的操作执行逻辑处理。 1、DIALOG编程的主要组件 a、屏幕 (Screen) DIALOG程序的核心部分…

青训营-豆包MarsCode技术训练营试题解析二十七

介绍 ‌豆包青训营‌是由字节跳动和稀土掘金社区共同发起的技术培训和人才选拔项目。该项目的目标是培养具有职业竞争力的优秀开发工程师,并提供全程免费的课程,不收取任何费用‌。 课程内容和方向 豆包青训营的课程涵盖前端、后端和AI方向。在这个飞…

人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换

接触人工智能的学习三个月了,每天与各种安装包作斗争,缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装,是时候总结一下踩过的坑和积累的经验了。 以一个典型的…

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中,华为的品牌形象较高,且产品质量过硬,因此用户基数也大。与此同时,随着影响力的增大,华为不断向外扩张,也逐渐成为了海外市场的香饽饽。作为开发者和运营者,我们要认识到…

Vue+Vite 组件开发的环境配置(超级简单)

vite是什么 Vite 是一个现代化的前端构建工具和开发服务器,它特别适用于构建大型的单页面应用(SPA)。Vite 旨在提供极快的冷启动速度,并且能够即时地(几乎实时地)更新模块,这得益于其利用原生 …

从仪表盘探索 MongoDB 关键指标

这是 MongoDB 监控系列文章的第七篇,前面几篇文章的链接如下: MongoDB 监控(一)MongoDB 监控(二)MongoDB 监控(三)MongoDB 监控(四)MongoDB 监控&#xff08…

mac安装php和xdebug调试

要在Mac上安装PHP 7.4,你可以通过几种方式来完成,但鉴于PHP7.4官方已不再维护,并且Homebrew默认仓库中不再提供此版本,我们需要从第三方仓库或直接从源代码进行安装。本文以brew方式安装,如果安装的是8.0以上&#xff…

UIlicious - 自动化端到端测试

在现代软件开发中,测试自动化已然成为产品交付质量的基石。而端到端测试(E2E),作为验证整个应用流畅运行的关键,常常是测试工作中最具挑战性的一环。这时,一款简单高效的自动化测试工具——UIlicious&#…

新一代零样本无训练目标检测

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年12月2日21点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…

Python_Flask01

所有人都不许学Java了,都来学Python! 如果不来学的话请网爆我的老师---蔡老师 Flask的前世姻缘 我不知道,没啥用,要学好这个框架,其实多读书,多看报就行了,真心想了解的话! Welcom…