库操作命令
查看依赖的库
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库加载顺序
就是同名接口,
只会使用第一个加载进来的。