linux 库依赖,开发和生产环境,部署问题

在生产环境中测试 发现程序无法运行,所以要分析一下

./mentester: /lib/libtinfo.so6: no uersion information available (required by ,/mentester)
./mentester' /lib/libncursesso.b: no uersion information auailable (required by ./mentester)

memtester uersion 1.2 .0 164-bit
Segmentation fault  //这个是我配置文件出错导致,可以忽略

分析问题,

#1.提示是so库有问题,
#2.通过ldd在开发环境找 程序依赖的库
#3.然后cp 这些库,从开发环境到生产环境,
#4. 生产环境,运行OK,问题解决


#开发环境  
$ Idd memtester
linux-vdso.so.1 (0x00007fff64d54000)
libi2c.so.0 => /lib/x86 64-linux-gnu/libi2c.so.0 (0x00007fec3c548000)
libncurses.so.6 => /lib/x86 64-linux-gnu/libncurses.so.6 (0x00007fec3c51f000)
libtinfo.so.6 => /lib/x86 64-linux-gnu/libtinfo.so.6 (0x00007fec3c4ed000)
libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007fec3c200000)
lib64/d-inux-x86-64.s.2 (0x00007fec3c5a4000)
 

#生产环境 
$cd /lib
#在这里目录可以看到有哪些库,如果名字不对,版本不匹配, 也能看到。 
#有些名字一样,但是依然有问题,就需要替换*.so



#也可以通过whereis libncurses.so.6 试试找位置


# 参考ln -d 软连接





============

参考 https://blog.csdn.net/mayue_web/article/details/104019036

objdump命令

# 查看依赖的库
objdump -x xxx.so | grep NEEDED

# 查看可执行程序依赖的库
objdump -x ./testTime | grep NEEDED

readelf命令

# 查看依赖的库
readelf -a xxx.so | grep "Shared"

# 查看可执行程序依赖的库
readelf -a ./testTime | grep "Shared"

# 查看依赖的库
readelf -d xxx.so
readelf -d ./testTime

# 查看静态库有哪些.o文件
readelf -d xxx.a

ldd命令

# 查看依赖的库
ldd xxx.so

# 查看可执行程序依赖的库
ldd ./testTime


在服务端查看哪些进程在使用某一个so

lsof  ***.so

==========
参考2 https://www.cnblogs.com/liushuhe1990/p/9876600.html

在Linux PC上查看arm交叉编译的可执行文件依赖的动态库 紫枫术河

在Ubuntu宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,类似于PC linux上的ldd命令。
    在电脑上安装的Linux系统中,有一个ldd命令,可以查看对应的可执行文件或库文件依赖哪些库,但可执行文件或库文件要求与操作系统的编译器类型相同,即电脑是X86的GCC编译器,那么无法通过ldd命令查看ARM交叉编译器编译出来的可执行文件或库文件。 如果想在Ubuntu等Linux宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,可以采用下面的命令:
arm-arago-linux-gnueabi-readelf -a ./ftdi_eeprom| grep "Shared"
或
readelf -a ./ftdi_eeprom| grep "Shared"

 如果要看pc的执行程序的链接库

	
ldd teat

参考3 https://www.cnblogs.com/silentdoer/p/11748567.html

Linux查看库依赖方法

#1.查看依赖的库:
objdump -x xxx.so | grep NEEDED

#2.查看可执行程序依赖的库:
objdump -x 可执行程序名 | grep NEEDED

#3.查看缺少的库:
ldd xxx.so

#如果某个依赖的库不存在,会打印类似“xxx.so not found”的提示

posted @ 2023-11-08 22:02  scott_h  阅读(54)  评论(0编辑  收藏  举报