linux下动态库(共享库)

命名规则:

  lib + 库名字 + .so


制作步骤:
    # 1) 生成与位置无关的代码(.o文件).
        gcc -fPIC -c *.c -I /头文件路径     # 生产与位置无关的.o文件.

    # 2) 将.o打包成共享库(动态库)
        gcc -shared -o lib*.so *.o -I 头文件路径名.

发布和使用共享库:

  发布的文件 : lib*.so及头文件.

  使用共享库:

    # 两种方法.
    gcc main.c lib*.so -I 头文件路径 -o 可执行文件名.
    gcc main.c -I 头文件路径 -L 库所在的目录 -l 库的名字(去掉lib和.so) -o 可执行文件名字.

解决程序执行时动态库无法被加载的问题:

   ldd 命令可以查看可执行文件在执行时所依赖的所有动态库.

解决方法:

  1) 将lib*.so拷贝到/lib下(不建议使用,可能会与系统带的库重名).

  2) 环境变量LD_LIBRARY_PARH=lib*.so路径. # 在开发过程中测试时使用(临时).

  3) vim .bashrc添加export LD_LIBRARY_PATH=动态库路径. 修改完成后要重启终端才会生效.

  4) 1.找打动态连接器的配置文件 /etc/ld.so.conf
   2.动态库的路径写到配置文件中.sudo vim /etc/ld.so.conf 添加动态库的路径.
   3.更新 – sudo ldconfig -v


优缺点:

优点:
    1. 执行程序体积小.
    2. 动态库更新了,不需要重新编译程序(前提:接口未变).
缺点:
    1. 发布程序的时候,需要把动态库提供给用户.
    2. 动态库没有打包到应用程序中,加载速度相对较慢.

注: 一般将头文件放在include文件夹里,库放在lib文件夹里,源文件放在src文件夹里.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值