学习笔记:Linux动态库

f01 动态库的制作

命名规则:libxxx.so(可执行文件)

        lib:固定前缀

        xxx:动态库的名字

        .so:固定后缀

动态库的制作过程

gcc 得到.o文件,在这里得到的.o文件必须是和位置无关的代码

gcc -c -fpic xxx.c xxx.c xxx.c ..........

gcc得到动态库

gcc -shared xxx.o xxx.o xxx.o ....... -o libxxx.so

 简单举例:

 在进行创建完动态库的时候,我对文件进行了简单的分类归纳

 在这个文件中,对main.c文件进行了可执行程序的生成:

 把main.c文件生成了可执行程序app,但是此时app这个可执行程序并不能运行,这源于动态库的工作原理与静态库不同,它需要找到一个路径,此时我们并没有在环境中添加动态库的绝对路径,在找不到路径的情况下,是无法成功运行动态库的。所以要想成功运行程序,我们首先要了解以下动态库的工作原理。

02 动态库的工作原理

动态库进行链接时,动态库的代码不会被打包到可执行程序中,在程序启动之后,动态库会被动态加载到内存中,通过ldd(list dynamic dependencies)命令检查动态库的依赖关系,与静态库不同的是,当系统加载可执行代码的时候,必须知道其所依赖的库的名字的同时,还需要知道库的绝对路径,此时就需要系统的动态载入器来获取绝对路径。

对于elf格式的可执行程序,是由ld-linux.so来完成的,它先后搜索elf文件的DT_RPATH段 、环境变量LD_LIBRARY_PATH、/etc/ld.so.cache文件列表、/lib/、/usr/lib目录找到库文件之后将它加载到内存中。

  •  方法1:在环境变量LD_LIBRARY_PATH中插入动态库的绝对路径

输入 以下命令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[动态库的绝对路径]

/*动态库的绝对路径查找方法:

        进入到动态库所在的文件夹,然后输入pwd命令,即可查找到绝路径

 

 完成之后可以利用ldd <可执行程序名称>来查看是否加入成功,如果成功会有以下显示

 在libcalc.so这一行会显示绝对路径,之后便可直接运行我们的可执行代码。这个方法是在我们终端中配置的,如果关掉终端,这个路径将会失效,所以这个方法是临时的。

要想永久的配置路径,可以用以下方法:

 用户级别:在我们的用户目录下有一个.bashrc文件,我们可以在这个文件中直接配置

 用vim进入到.bashrc文件中,在最后面加入

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<动态库的绝对路径>

 

添加完成后,需要使修改生效

source .bashrc 

这样用户级别的配置就完成了 

同样,系统级别也可以配置路径,但是在系统级别配置就需要使用权限,具体方法与用户级别差不多

sudo vim /etc/profile

在这个文件中插入 

 

保存退出 然后source一下就可以了 

  • 方法2:利用/etc/ld.so.cache文件列表配置 

/etc/ld.so.cache这个文件是一个二进制文件,所以我们需要间接的取更改它,在用户目录下找到这个文件:

sudo vim /etc/ld.so.conf

在这个文件中配置即可,直接将路径粘贴在该文件中 ,保存退出然后source即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值