linux常用库操作命令

库操作命令

查看依赖的库

eg:查看libmsc.so的依赖

  objdump -x libmsc.so | grep NEEDED

在这里插入图片描述

方式二

readelf -d iat_online_sample

查看缺少的库(或者路径)

例如查看 iat_online_sample 所依赖的库

ldd iat_online_sample

在这里插入图片描述
可以看到libmsc.so这个库没有找到

设置动态库搜索路径(指定环境变量)

当执行函数动态链接.so时,如果从文件不在缺省目录’/lib’、’/usr/lib’、‘、lib64’。那么就需要指定环境变量LD_LIBRARY_PATH

export LD_LIBRARY_PATH=./

在这里插入图片描述
这种方式重启后生效。
如果想永久有效
vim /etc/bashrc,修改其中的LD_LIBRARY_PATH变量。
例如:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/au1200/bin。

感觉这里设置的不如 windows智能,windows首先搜索当前目录下链接库,没找到再找系统的。而linux只搜素系统的。

查看当前环境变量

显示所有

export

显示指定

echo $LD_LIBRARY_PATH

取消 环境变量的指定

unset LD_LIBRARY_PATH 

宏定义补充
LIBRARY_PATH is used by gcc before compilation to search for directories containing libraries that need to be linked to your program.
LD_LIBRARY_PATH is used by your program to search for directories containing the libraries after it has been successfully compiled and linked.

查看导出接口

nm -D libaplusb.so
objdump -tT libaplusb.so
readelf --dyn-syms libaplusb.so

在这里插入图片描述

gdb查看崩溃

程序崩溃后查看,日志。
有日志最好。
下面是我在编写freeswitch插件的时候,出现了程序崩溃。
只能这么查找了

gdb /usr/local/freeswitch/bin/freeswitch core.98832

然后输入

bt

然后就会显示程序的奔溃点
在这里插入图片描述
可以看到,最后的崩溃点在lua函数里。

linux库加载顺序

就是同名接口,
只会使用第一个加载进来的。

参考:
linux 下 动态链接库 so 之间的符号冲突
Linux不同共享库中同名函数的处理


版权声明:本文为lanxiaziyi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。