静态链接与动态链接、静态库与动态库、硬链接与软链接

本文详细介绍了C++程序从源代码到可执行文件的整个流程,包括预编译、编译、汇编和链接四个阶段。重点探讨了静态链接与动态链接的区别,静态链接导致空间浪费和更新困难,但运行速度快;动态链接则实现资源共享和便捷更新,但可能带来性能损耗。此外,还讲解了静态库与动态库的制作以及硬链接与软链接的概念和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、C++从代码到可执行程序经历了什么?

(1)预编译:主要处理源代码文件中的以“#”开头的预编译指令。(预编译后形成 .i 文件)

处理规则见下:
  删除所有的#define,展开所有的宏定义。
  处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。
  处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。
  删除所有的注释,“//”和“/**/”。

(2)编译:把预编译之后生成的xxx.i或xxx.ii文件,进行一系列词法分析、语法分析、语义分析及优化后,生成相应的汇编代码文件。

(3)汇编:将汇编代码转变成机器可以执行的指令(机器码文件)。
  汇编器的汇编过程相对于编译器来说更简单,没有复杂的语法,也没有语义,更不需要做指令优化,只是根据汇编指令和机器指令的对照表一一翻译过来,汇编过程有汇编器as完成。经汇编之后,产生目标文件(与可执行文件格式几乎一样)xxx.o(Windows 下)、xxx.obj(Linux下)。

(4)链接:
  将不同的源文件产生的目标文件进行链接,从而形成一个可以执行的程序。
  链接分为静态链接和动态链接。

二、静态链接与动态链接:

静态链接:
  函数和数据被编译进一个二进制文件。在使用静态库的情况下,在编译链接可执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值