共享库(shared library)/动态库

        共享库在程序编译时并不会被链接到目标代码中,而是在程序运行时才载入。不同程序需要相同的库时,在内存中只需要有一份该共享库的拷贝,避免了空间浪费问题。并且在运行时才会被载入,也解决了静态库对程序的更新,部署和发布带来的麻烦

共享库的制作:

1. 将.c文件编译成.o文件

gcc -fpic -c fun1.c fun2.c

2.使用gcc将.o文件编译成库文件

gcc -shared fun1.o fun2.o -o litest2.so
#注意与静态库的不同 gcc -shared  .so

动态库的使用

和静态库使用类似。

gcc -o main2 main.c -I./include -L./lib -ltest2

但是运行:./main2时,竟然报错:找不到libtest2的库

ldd加载器可以查看文件链接的库函数

如何让系统找到库

        方法很多,只记一个最常用:

        永久设置,把 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径,设置到~/.bashrc文件中(添加到最后即可),然后在执行下列三种方法之一:

        执行 . ~/bashrc 使配置文件生效。

        执行source ~/.bashrc使配置文件生效

        退出当前终端,然后再次登录也可以使配置文件生效

动态库文件在编译的时候,连接器需要使用参数-L找到库文件所在的路径。

在执行的时候,是加载器ldd根据动态库的路径进行加载的,与编译时候用的-L指定的路径无关

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值