静态库,共享库(动态库)

1.静态库

  • 命名方式
    lib+库名字+.a
    eg:libMytest.a

  • 制作静态库步骤
    1>把所有的.c文件生成.o的二进制文件(防止用户看见源码)
    gcc *.c -c
    2>将生成的.o文件打包
    ar rcs 生成静态库的名字(libMytest.a) 依赖的所有.o文件

  • 发布
    制作的静态库和头文件(包含函数的接口)//这样用户就只有接口和二进制代码,规避了源码实现的方法.

  • 调用静态库的方式:
    1>gcc main.c -I include -L lib -l Mytest -o myapp  //用户自己写的main.c编译时调用静态库  -I 指定头文件 -L指定调用库 -l指定调用哪个静态库(掐头去尾,不用写libMytest.a) 
    2>gcc main.c lib/libMytest.a -o myapp -I include //-I指定头文件,lib/libMytest.a是静态库

  • 静态库的优缺点
    优点
    1>编译的时候静态库中用到的相应程序段就打包到程序中,所示使用静态库编译的程序发布时,不需要提供对应的库;
    2>加载库的速度快
    缺点
    1>库中被使用的代码段被打包到程序中,导致程序体积变大
    2>库发生改变就需要重新编译

2.共享库

在这里插入图片描述

- 命名方式
lib+库名字+.so
eg:libMytest.so

  • 制作动态库步骤
    1>把所有的.c文件生成.o的二进制文件,且与位置无关(防止用户看见源码)
    gcc -fPIC *.c -c -I …/include  //-fPIC生成与位置无关的.o  -I指定头文件
    2>将生成的.o文件打包成动态库
    gcc -shared -o libMytest.so *.o -I include

  • 发布
    制作的动态库和头文件(包含函数的接口)//这样用户就只有接口和二进制代码,规避了源码实现的方法.

  • 调用静态库的方式:
    1>gcc main.c -I include -L lib -l Mytest -o myapp  //用户自己写的main.c编译时调用动态库  -I 指定头文件 -L指定调用库 -l指定调用哪个动态库(掐头去尾,不用写libMytest.so) 
    2>gcc main.c lib/libMytest.so -o myapp -I include //-I指定头文件,lib/libMytest.so是动态库o
    注意:编译的时候会报错找不到动态链接库以下方法可以使其找到(ldd 执行程序名字 //查看动态链接库的链接情况):
    1>将自己的动态库拷贝到 /lib (此方法会存在重名的风险,不推荐)
    2>终端输入 export LD_LIBRARY_PATH=当前动态链接库的地址 //export 输出当前变量  但是这个方法只是临时的,当当前的终端关闭后,LD_LIBRARY_PATH的值就消失了
    3>export LD_LIBRARY_PATH=当前动态链接库的地址 写入.bashrc里面 然后 source .bashrc 就是永久设置了(因为终端每次启动的时候都会读取.bashrc文件)
    4> 将动态库的链接放入动态连接器的配置文件(/etc/ld.so.conf)中然后更新(sudo ldconfig -V)
    优点
    1>库中被使用的代码段不会被打包到程序中,只是会做个标记,直接去调用,所以程序体积小
    2>库发生改变不需要重新编译
    缺点

1>编译的时候动态库中用到的相应程序段没有被打包到程序中,只是做了标记,所示使用动态库时,需要提供对应的库;
2>加载库的速度相对于静态库较慢一点.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值