知识大全 Linux 动态函式库解析(一)

Posted 档案

篇首语:送饥者一条鱼,只管一天不饿;教他学会捕鱼,能使他永不受饿。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Linux 动态函式库解析(一)相关的知识,希望对你有一定的参考价值。

Linux 动态函式库解析(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  摘要:使用动态函式库的好处有许多 首先 就是由于执行档主要呼叫的函式都包含于动态函式库中 所以档案所占的空间可以因而缩小 其次 当动态函式库的函式内容有所改变时 呼叫该动态函式库的程序 可以在最小修正甚至是不需重新编程的情况下 就可以叫用到新版本的函式库服务     前言       用 MS Windows 一段时间的读者 应该都听过动态函式库这个名词 在 Windows X/ME 或是 Windows NT/ 中 常见到的动态函式库为副档名 DLL (Dynamic Loading Library)的档案       而在 Linux 中 当然也有动态函式库的机制存在 如此一来 所撰写的程序便无需透过静态连结(Static Link) 而可以在编程时透过动态连结(Dynamic Link)产生我们所要的执行档       使用动态函式库的好处有许多 首先 就是由于执行档主要呼叫的函式都包含于动态函式库中 所以档案所占的空间可以因而缩小 其次 当动态函式库的函式内容有所改变时 呼叫该动态函式库的程序 可以在最小修正甚至是不需重新编程的情况下 就可以叫用到新版本的函式库服务       对于发展 Embedded Linux 的业者来说 能够尽可能减少应用程序执行环境所需空间的大小 便可以把日后成品所需的 Flash 容量降到最低 在整体成本以及所耗用的记忆体空间来说 都可以得到许多的好处 而在动态函式库来着手所得到的效益也是相当可观的 尽可能的删去不必要的动态函式库 以及针对动态函式库改写来缩小或是透过工具删去用不到的函式 都可以带来许多的助益       当然棉 动态函式库的好处还不只这些 相信读者们在文章中可以发现其它的妙用的       档案格式(ELF VS A out)       首先 我们必须先确定目前所执行的 Linux Kernel 版本有开启 ELF 与 A out 执行档案格式的支援(通常都会有)     Kernel support for a out binaries (CONFIG_BINFMT_AOUT) [M/n/y/?]   Kernel support for ELF binaries (CONFIG_BINFMT_ELF) [Y/m/n/?]       举个例子来说 若要执行 a out 格式的执行档时 我们必须确认 CONFIG_BINFMT_AOUT 为 Y 也就是由 Kernel 直接支援 a out 档案格式 或者 CONFIG_BINFMT_AOUT 为 M 也就是不把 a out 的档案格式支援编入Kernel 中 改以 Module 的形式存在 一旦 Kernel 需要执行 a out 格式的程序时 在动态的载入该 Module 来启动具备执行 a out 执行档的能力 不过a out 执行档的格式 是 Unix 上使用了相当久的的档案格式 ELF 是目前较新的的档案格式 a out 档案格式共有三个 Section 分别为 text data 及 bss 并还包括了一个文字表(String Table)与符号表(Symbol Table) 与ELF 档案格式比较起来 a out 相形之下显得较为缺乏弹性 ELF档案格式允许多个节区的存在 执行档可以根据需求提供应用程序执行环境的节区 并且ELF 档支援了 bit 与 bit 的执行环境 其实 两者之间还有其它规格上的不同 有兴趣的读者也可以自行找一些相关的资料来比较即可了解       再来呢 我们就来讨论动态函式库的档案格式 我们都知道在 Linux中有 a out 与 ELF 两种档案的格式 其中目前我们最常见的便是 ELF 档案格式 在 Linux 的函式库目录中 我们常常可以见到 * so 的档案 例如: /lib/libc so 或是 /lib/ld linux so 这些便是在 Linux中所常见到的动态函式库档案 由下图我们可以看到动态函式库 libc so 的 ELF Header:     libc so 的 ELF Header   e_ident >EI_MAG : fh    >EI_MAG :E    >EI_MAG :L    >EI_MAG :F    >EI_CLASS: bit objects    >EI_DATA:ELFDATA LSB    >EI_VERSION: h    >EI_PAD: h    >EI_NIDENT: h   e_type: ET_DYN (Shared Obj File)   e_machine:Intel   e_version:Current version   e_entry: a h   e_phoff: h   e_shoff: bbf ch   e_flags: h   e_ehsize: h   e_phentsize: h   e_phnum: h   e_shentsize: h   e_shnum: h   e_shstrndx: dh       由图中 我们可以注意到 e_type: ET_DYN e_type 是在ELF 档案的格式中 用来描述目前该档的档案型态 我们所举的例子为 libc so 这个动态函式库的档案 所以 e_type 的属性为 Shared Obj File       当然棉 我们若再拿一个ELF执行档来比较也是不错的 所以如下图     ls 的 ELF Header   e_ident >EI_MAG : fh    >EI_MAG :E    >EI_MAG :L    >EI_MAG :F    >EI_CLASS: bit objects    >EI_DATA:ELFDATA LSB    >EI_VERSION: h    >EI_PAD: h    >EI_NIDENT: h   e_type: ET_EXEC (Executable file)   e_machine:Intel   e_version:Current version   e_entry: h   e_phoff: h   e_shoff:bea h   e_flags: h   e_ehsize: h   e_phentsize: h   e_phnum: h   e_shentsize: h   e_shnum: ah   e_shstrndx: h       我们可以注意到 e_type: ET_EXEC 这就是 ELF 档中对于执行档所定义的档案属性     cha138/Article/program/Oracle/201311/18141

相关参考

知识大全 Linux 动态函式库解析(四)

Linux动态函式库解析(四)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要我想各位读者应

知识大全 LINUX系统中动态链接库的创建与使用

LINUX系统中动态链接库的创建与使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  大家都知道

知识大全 linux生成(加载)动态库静态库和加载示例方法

  动态库的生成  /*mysumc*/    复制代码代码如下:  #include<stdioh>#includesrch  intsum(intaintb)return(a+b);&

知识大全 根据下列条件分别求二次函式的解析式(1)抛物线经过(0,3)(1,0)(3,0)

根据下列条件分别求二次函式的解析式(1)抛物线经过(0,3)(1,0)(3,0)(1)抛物线经过(0,3)(1,0)(3,0)第二个第三个点就是影象与X轴的交点了可设抛物线为y=a(x-1)(x-3)

知识大全 什么是点函式

什么是点函式?点函式的定义:从点集到实数集的对映,称为“点函式”,有了点函式的概念,就可以把一元函式、二元函式、三元函式、……、n元函式的概念都统一到点函式的概念,更利于我们对函式实质的理解。把实数x

知识大全 正比例函式y=3x 怎样画影象(一条直线)

正比例函式y=3x怎样画影象(一条直线)找两个基准点。令x=0,得出y=0,确定一个点(0,0)令x=1,得出y=3,确定另一个点(1,3)两点确定一直线正比例函式的影象是怎样的一条直线正比例函式的影

知识大全 初中数学二次函式动点问题有什么解题方法么

初中数学二次函式动点问题有什么解题方法么?最好能指出资料!谢谢了第一是以静化动,把问的某某秒后的那个时间想想成一个点,然后再去解,第二是对称性,如果是二次函式的题,一定要注意对称性。第三是关系法:你可

知识大全 已知f(x)在R上为偶函式,好并且在[0,+无穷大)上为减函式,求不等式f(2m)

已知f(x)在R上为偶函式,好并且在[0,+无穷大)上为减函式,求不等式f(2m)以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 已知定义域为R的函式f(x)在区间(8,+∞)上为减函式,且函式y=f(x+8)为偶函式则

已知定义域为R的函式f(x)在区间(8,+∞)上为减函式,且函式y=f(x+8)为偶函式则  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后

认为决策是一个动态的过程,这一思想来源于__

认为决策是一个动态的过程,这一思想来源于_____A、理查德·施奈德B、伊斯顿和拉斯韦尔C、西蒙D、林德布罗姆答案:A解析:伊斯顿和拉斯韦尔将决策概念带到互动、正式和非正式关系的层面上;西蒙从理性、非