Linux动态库与静态库(一)

10 篇文章 3 订阅

linux库的分析:

本质:可执行的二进制代码,可以被加载到内存执行  

特点:现成、可复用、快速的学习

种类:静态库与动态库

Eg: /lib共享库和内核模块, / bin和/ sbin所需

 

 

动态链接库的配置文件:

 

 

实际操作

MyDfine.h:库函数头文件

MyDfine.c:库函数的实现

main.c测试我们库文件的程序文件:

 

静态库的生成

编译生成目标文件:

将目标文件加到libMyDefine.a静态库文件中:

 

使用自己的静态库将测试文件main.c编译并链接为可执行二进制文件:

静态库的验证:

 

已链接到了目标文件中,函数被完整的拷贝到了执行文件中,再次执行的时候也就不需要了。

的查看:

动态生成:

 

指令说明:-shared表明产生共享库,而-fPIC则表明使用地址无关代码

当前路径下的(mian.o)执行文件运行出错

  1. 没有库
  2. 找不到库(现在的情况)

解决:将我们自己的动态库放到/usr/lib下面

wulijiao@ubuntu:/usr/lib$  mv ../../sdb/wulijiao/libCode/libMyDefine.so  ./

临时变量路径LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

动态库的验证:

查看

列出文件中的符号(本质就是函数和全局变量)

U非本地库调用 、T库中定义的函数

库文件位置

通过系统的环境变量设置:

  1. 在/lib或者/usr/lib下面;
  2. 相关搜索路径的配置:配置/etc/ld.so.conf文件;
  3. 在环境变量LD_LIBRARY_PATH添加路径。

库的比较:

静态库:

  1. 链接时将整个程序放到可执行程序中;
  2. 副本较多;
  3. 可执行程序生成之后便不依赖库;
  4. 兼容性问题

动态库:

  1. 程序运行时加载;
  2. 共享;
  3. 运行时加载;
  4. 升级方便

兼容因素

  1. 函数定义的改变;
  2. 输出数据项的改变;
  3. 输出函数被删除;
  4. 输出函数接口的改变。

环境变量的使用:

LD_LIBRARY_PATH:制定查找动态库是除默认路径外的其他路径;

常见环境变量:

HOME: 指定命令的搜索路径

PATH: 指定用户的主工作目录

LOGNAME:指当前用户的登录名

5HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的

SHELL:指当前用户用的是哪种Shell

……………

查看指令env

库的命名:

lib”+”函数库名称”+”.so”+主版本+次版本号+版本号

附:

细化知识点:

-fPIC详解:https://www.cnblogs.com/cswuyg/p/3830703.html

下一章节内容:

Nm指令 文件符号的读取

fPIC

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值