首页 > 编程语言 >C++ 编译过程

C++ 编译过程

时间:2024-08-15 09:37:36浏览次数:15  
标签:文件 操作系统 静态 C++ 编译 动态 过程 链接 加载

源码 ——> 预处理器 .i 文件——> 编译器 .s 文件 ——> 汇编器 .o 文件 ——> 链接器 ——> 执行程序 

预处理器:读取代码里 #开头的命令 ,并把他插入到程序文本里,生产已.i 为后缀名的文件

编译器:把.i  文件 生成汇编文件  .s

汇编器:把汇编文件 生成 二进制 文件 .a 

链接器:链接其他的二进制 文件 生成 最终 执行程序

 

静态链接 和 动态链接

1.静态链接(在装载之前,完成所有符号的引用)
静态链接:链接器在链接阶段将各种库文件和相关文件集成到可执行文件中,在windows下静态链接库以.lib结尾,linux下以.a结尾

步骤:1,空间与地址的分配,扫描所有的目标文件,合并相似段,收集当中所有的符号信息,

2,符号解析与重定位,调整代码位置

优点:程序发布时无需带库,可以独立执行

缺点:1,浪费内存空间,多进程操作系统下,内存中可能会存在多个相同的库

2,程序开发受限,有一个模块更新,要重新编译打包整个代码

2.动态链接(在运行时才进行符号重定位)
动态链接:动态链接是把链接过程在运行时进行,动态链接在可执行文件装载或运行的时候,由操作系统的装载程序加载库文件,windows下以.dll结尾,也有.lib的,但是这个是叫做导入库,和静态链接的不一样,linux下以.so结尾。。

步骤:编译时通过记录一系列符号与参数,在程序运行或加载时将这些信息传给操作系统,操作系统将需要的动态库加载到内存中去,然后再程序运行到指定的代码时,去共享执行内存中已经加载的动

标签:文件,操作系统,静态,C++,编译,动态,过程,链接,加载
From: https://www.cnblogs.com/JOKER2255/p/18360240

相关文章

  • java语言,MySQL数据库;电影推荐网站 30760(免费领源码)计算机毕业设计项目推荐万套实战教
    摘 要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的电影推荐网站;电影推荐网站的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本电影推荐网站是针对目前电影推荐网站的实际需求,从实际工作出发,对过去的电影......
  • java语言,MySQL数据库;基于Web的高校知识共享系统设计与实现 32050(免费领源码)计算机毕业
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对高校知识共享系统等问题,对高校知识共享系统进行研究分析,然后开发设计出高校知识共享系统以......
  • java语言,MySQL数据库;23825基于java的员工考勤系统(免费领源码)计算机毕业设计项目推荐万
    摘 要由于数据库和数据仓库技术的快速发展,员工考勤系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。考勤管理系统对处理对象和服务对象,自身的系统结构,处理能力,都将适应技术发展的要求发生重大的变化。员工考勤系统除了具有共享系统的全部功能以外,能通过......
  • Qt/C++地图坐标纠偏/地球坐标系/火星坐标系/百度坐标系/互相转换/离线函数
    一、前言说明为什么需要地球坐标纠偏这个功能,因为国家安全需要,不允许使用国际标准的地球坐标系,也并不是咱们这边这样,很多国家都是这样处理的,就是本国的地图经纬度坐标都是按照国家标准来的,所以就需要一个转换。国内主要有三种坐标系,国际标准用的地球坐标系WGS-84,国家标准用的火星......
  • 分享一个五年级时制作的游戏(C++)
    游戏名称《mediocre》是一个纯文字类型的游戏,由于当时不会使用图形库,所以没有任何图像进入游戏后会有一些无关紧要的弹窗公告蓝窗启动界面(伪) 关闭弹窗后会显示一段时间的游戏LOGO之后就进入游戏界面了,附带一段简陋的剧情(大概就是冒险时不幸失联)游戏中的人物有生......
  • C++趣味实验之:设计一个模拟公司运营的程序(极简版)
    根据剩余价值理论,设计一个模拟公司运营的程序原理非常简单: (此公式为企业扩大再生产的基本规律)同理,我们可以利用C++来实现这个操作,这就需要使用递归函数doublen,c,sum1,d1,z1;cout<<"输入启动资金(万元):"<<endl;cin>>n;intb;cout<<"输入市场劳动力数目:"<<endl;ci......
  • C++笔记4•类和对象3•
    1.初始化列表(1)构造函数再理解:classDate{public:Date(intyear,intmonth,intday){  _year=year;  _month=month;  _day=day;}private:int_year;int_month;int_day;};上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其......
  • MATLAB R2023b配置Fortran编译器
    MATLABR2023b配置Fortran编译器引言1.安装VisualStudio20192.安装IntelAPI20243.配置xml文件文件4.设置环境变量5.MATLAB编译Fortran引言当我们需要用到MATLAB编译Fortran代码后进行调用计算时,整个配置流程较繁琐。下面以MATLABR2023b为例,介绍配置Fortran......
  • 2024华为OD机试真题-启动多任务排序(C++/Python)-C卷D卷-200分
    2024华为OD机试题库目录(Python、C++)-(C卷+D卷)-CSDN博客目录题目描述输入描述输出描述用例1题目解析代码c++python题目描述一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。......
  • 基于STM32的边缘计算实时数据处理可视化系统:嵌入式C++、 FreeRTOS、Kafka、Spring Bo
    一、项目概述本项目旨在设计并实现一个基于STM32的边缘计算实时数据处理系统。该系统能够在边缘设备端进行数据采集、预处理,并将处理后的数据实时传输到后端服务器进行进一步分析和存储。本项目主要解决以下问题:减轻后端服务器的数据处理负担,提高系统整体效率降低......