共享库

注:组成共享库的目标文件,在编译时需要加-fPIC选项,例如:$ gcc -c -fPIC stack/stack.h

-f 后跟一些编译选项,PIC表示position Independent Code(位置无关代码);

区别:加了-fPIC的共享库,其各段的加载地址并没有定死,可以加载到任意位置,因为指令中的地址都是相对ebx的,没有使用绝对地址,只要根据实际的家在地址修在ebx就好了。这就是PIC的特点。


动态链接器会在哪些目录下搜索共享库?

1)首先在环境变量LD_LIBRARY_PATH保存的路径中查找;(仅适合于开发调试中临时用一下)

2)从缓存文件中查找,该缓存文件是由ldconfig读取配置文件、etc/ld.so.conf获取的;

3)若还未找到则在默认的系统库文件中查找。

1)详解:

两种方式:①:$ LD_LIBRARY_PATH = /home/akaedu/testdir ./main    

    ②:$ export LD_LIBRARY_PATH = /home/akaedu/testdir 

     ./main

区别:①时,仅当前创建的main进程才获得这个环境变量,shell进程本身并不保存该环境变量,以后执行的其他命令也不会获得它。

2)详解:

把libstack.so所在的目录的绝对路径添加到配置文件、etc/ld.so.conf,然后运行ldconfig;

3)详解:

把libstack.so考到/usr/lib,或/lib中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值