第六章Linux库.ppt-大连理工大学精品课程.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章Linux库.ppt-大连理工大学精品课程.ppt

嵌入式系统程序设计 大连理工大学软件学院 嵌入式系统工程系 赖晓晨 Linux库 Linux库概述 库操作工具 静态库 共享库 动态链接库 一、Linux库概述 库的概念:库是操作系统或者编译器提供的一种目标文件,是可以被多个软件项目使用的二进制代码集。 库是代码重用思想的体现。 使用库可以节约编程人员大量的时间。 库分类 静态库,是在执行程序运行前就已经加入到执行码中,在物理上成为执行程序的一部分。 共享库,是在执行程序启动时加载到执行程序中,可以被多个执行程序共享使用。 动态链接库,其实并不是一种真正的库类型,应该是一种库的使用技术,应用程序可以在运行过程中随时加载和使用库。 库命名约定 所有库都以lib开头,表示一个库文件; 文件名以.a结尾的是静态库,以.so结尾的是共享库。 共享库库名称约定 共享库命名规则稍显繁琐,我们来区分一下一下命名: real name:包含库名、主版本号、次版本号以及发布号等字段,它代表文件中包含了库的代码,这是库的实体文件。 soname(shared object name):库文件的一个符号链接,一般仅包括库名和主版本号。 linkername:库文件的符号链接,它仅包含库名,一般供编译器使用。 共享库库名称约定(续) ??看下面的例子: 在以上信息中: libpng.so.2是共享库的实名(realname) libpng.so.2是共享库so名(soname) libpng.so?则是连接名(linker?name),用于编译连接。 常用库 库 头文件 描述 libc.so 无 标准C库 libdb.so db.h 数据库库 libm.so math.h 数学库 libpthread.so pthread.h 多线程库 libz.so zlib.h 压缩例程库 libvga.so vga.h 底层图形库 libcom_err.so com_err.h 出错处理库 libdl.so dlfcn.h 动态加载库 二、库操作工具 Linux系统提供很多对库进行操作的工具,具体如下: nm命令 ar命令 ldd命令 ldconfig命令 1. nm命令 用途:列出库或目标文件的所有符号。 查看程序调用什么函数 查看一个给定的库或者目标文件是否提供了所需的函数。 举例:下图列出了libc.so.6中所有包含sprintf的字符串的符号。 nm命令(续) 2. ar命令 用途:可以建立一个归档文件,通常用来创建静态库。 举例:建立静态库 3. ldd命令 用途:列出为程序正常运行所需要的共享库。 举例:利用ldd命令查看bash所依赖的库文件,如下图所示: ldd命令(续) 4. ldconfig命令 当为系统安装好库文件之后,需要运行ldconfig命令,其功能是根据/etc/ld.so.conf中的路径检查库文件,并为它们创建相应的soname,然后更改ld.so.cache文件。 ldconfig命令(续) 应用程序执行时,/lib目录下的程序ld-linux.so.X(X是版本号)会首先被运行,这就是Linux系统的程序装载器。 装载器负责检查应用程序需要使用的共享库,从ld.so.conf指定的目录中找到这些库并加载,然后把加载信息写入缓存文件/lib/ld.conf.cache中供其他程序使用,以提高系统运行效率。 ldconfig命令(续) Linux系统下的一个环境变量: $LD_LIBRARY_PATH:是一个由冒号分隔的目录清单,包含了运行时的共享库,可以指示ld.so到何处搜索没有保存在标准位置的库。 (对应文件为:/etc/ld.so.conf) 三、静态库 ?静态库一般命名为libxxx.a,采用静态编译得到的程序文件比较大,因为整个函数库都已经被链接到程序中。 静态库实质是目标文件的集合,采用ar命令可以创建静态库。首先编写源文件,然后把源文件分别编译为目标文件,注意使用-c选项,然后用ar命令把目标文件归档为一个静态库文件。 【例6-1】 【例6-1】(续) 【例6-1】(续) 四、共享库 共享库一般命名为libxxx.so,与静态库不同,共享库并不会在程序编译时被添加到可执行文件中,而是在程序执行时才会被链接,因此采用动态编译方式得到的可执行程序文件比较小,但是程序的执行依赖于环境,当前操作系统中必须存在程序需要的共享库,否则程序不能执行。 编译共享库时要用gcc的-shared和-fPIC选项,前者表示编译为共享库,后者表示把库文件编译成位置无关代码,否则将来程序无法运行。 共享库的生成和使用方法 共享库(续) 库依赖关系 五、动态链接库 打开共享库 提取函数地址 关闭共享库 共享库错误函数 1. 打开共

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档