【Linux】静态库及动态库

库的制作和使用:
 什么是库:
    1 库是二进制代码
    2 库是加了密的源代码
    3 库是功能相近或者相似的函数的集合


 库的作用:
    1 代码的复用性, 提高了软件开发的效率, 而且稳定安全.
 
 库的制作:
   库分为静态库和动态库
   库的名字: libtest1.a
   
   材料: main.c fun1.c fun2.c head.h
         main.c文件中调用了fun1.c和fun2.c中的函数
         head.h文件中有fun1和fun2函数的声明
      
   静态库的制作:
   1 gcc fun1.c -o fun1.o
     gcc fun2.c -o fun2.o
   2 ar rcs libtest1.a fun1.o fun2.o
 
   动态库的制作:
   1 gcc -c -fpic fun1.c fun2.c 
   2 gcc -shared fun1.o fun2.o -o libtest2.so  
         (可一步生成 gcc -shared -fpic fun1.c fun2.c -o libtest2.so)


 库的使用:

   gcc main.c -I./ -L./ -ltest2  -o main
 
 库的发布:
   1 提供头文件
   2 提供库文件
 
 动态库找不到的问题分析和解决:
 ./main: error while loading shared libraries: libtest2.so: cannot open shared object file: No such file or directory
原因: 在执行的时候会根据路径去找动态库, 若找不到就会报错.
1 /usr/lib /lib
2 export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH        (echo  LD_LIBRARY_PATH)
3 在用户的配置文件.bashrc里面添加export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
  然后执行. ~/.bashrc(或source ~/.bashrc)
4 在/etc/profile里面添加export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH,
  然后. /etc/profile
5 在/etc/ld.so.conf里面添加库的绝对路径, 然后执行sudo ldconfig -v使配置生效  
 
(export 查看环境变量
export | grep LIB 查看lib环境变量
unset LD_LIBRARY_PATH 删除环境变量)
 
ldd main查看使用了哪些库
nm main 查看有哪些函数 (-u 查看未定义函数)


 动态库和静态库的优缺点:
 
 静态库的优点:
 1 执行速度快, 是因为静态库已经编译到可执行文件内部了
 2 移植方便, 不依赖域其他的库文件
 缺点: 
 1 耗费内存, 是由于每一个静态库的可执行程序都会加载一次
 2 部署更新麻烦, 因为静态库修改以后所有的调用到这个静态库的可执行文件都需要重新编译
 
 动态库的优点:
 1 节省内存
 2 部署升级更新方便, 只需替换动态库即可,然后再重启服务
 缺点: 
 1 加载速度比静态库慢
 2 移植性差
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值