码迷,mamicode.com
首页 > 系统相关 > 详细

Linux进程下的编译

时间:2020-07-04 13:13:31      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:动态链接库   idt   局部变量   全局变量   运行   exe   更新   名称   保存   

  • 在Linux下面,二进制的程序要有严格的格式,这个格式称为ELF(Executeable and Linkable Format,可执行与可链接格式),这个格式可以根据编译的结果不同,分为不同的格式。

  • 源文件.c和头文件.h最终编译成为的.o对象文件,是ELF的第一种类型,即可重定位文件(Relocatable File)。技术图片

  • 局部变量放在栈里,程序运行过程中随时分配空间,随时释放,对于.o的二进制文件,程序还未启动,可重定位文件.o里没有局部变量。

  • 对于编译好的代码和变量,将其加载到内存里时,要加载到一定位置,如函数所在的代码位置,全局变量所在的位置。但对于.o文件,不可以直接运行,这里面只是部分代码片段,.o里面的位置是不确定的,所以必须可重定位。

  • 若函数作为库文件被重用,不能以.o的形式存在,而是要形成库文件,最简单的类型是静态链接库.a文件(Archives)。

  • 在.o文件间的链接过程中,重定位起作用,链接结束后,形成的二进制文件叫可执行文件,是ELF的第二种格式。

  • 静态链接库一旦链接进去,代码和变量的部分就进行合并,因而程序运行的时候,就不依赖于这个库是否存在。但对于相同的代码段,如果被多个程序使用的话,在内存里面就有多份,一旦静态链接库更新,如果二进制执行文件不重新编译,也不随着更新。

  • 动态链接库(Shared Libraries),不仅仅是一组.o对象文件的简单归档,而是多个对象文件的重新组合,可被多个程序共享。当一个动态链接库被链接到一个程序文件中的时候,最后的程序文件并不包括动态链接库中的代码,而仅仅包括对动态链接库的引用,并且不保存动态链接库的全路径,仅仅保存动态链接库的名称。

  • 动态链接库,是ELF的第三种类型,共享对象文件.so(Shared Object)。运行时的链接动作都由动态链接器完成。

Linux进程下的编译

标签:动态链接库   idt   局部变量   全局变量   运行   exe   更新   名称   保存   

原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13233898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!