Linux编译过程

预编译过程

一般是读取 .c 或 .cpp 源程序,对其中的伪指令(以# 开头的指令)和特殊符号进行处理。

伪指令有 宏定义,条件编译, 头文件包含指令。

特殊符号如 LINE 标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。

编译过程

编译程序要做的是,通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。不同编译系统会有优化处理。

汇编过程

实际上指把汇编语言代码翻译成目标机器指令的过程。

链接过程

由汇编程序生成的目标文件并不能立即就被执行,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等),也可能调用了某个库文件中的函数。

链接程序的主要工作就是将有关的目标文件彼此相连接。即:将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。

静态链接方式(lib文件):在程序执行之前完成所有的组装工作,生成一个可执行的目标文件(exe文件)。

静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序c存在时,内存中就会存在多个拷贝,这样会浪费内存资源。


动态链接方式(dll文件):在程序已经为了执行被装入内存之后完成链接工作,并且在内存中一般只保留该编译单元的一份拷贝。

你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终的EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值