近日在添加一个镜像内依赖时,出现了令人非常困惑的现象:
明明依赖文件(an excutable binary)是存在的,但执行却无法找到文件;这篇文章就来记录一下这个问题的解决过程
使用uname -a
查看系统位数
可以看到x86_64
,64位系统
再查看依赖binary的位数,使用file
命令(file
命令会输出一个二进制文件的详细信息)
可以看到也是x86-64
,64位的excutable binary
到这里可以排除位数不兼容的问题,并且只要安装了ia32-libs
依赖或是更细粒度的libc6-i386(GNU C Library: 32-bit shared libraries for AMD64)
,就可以在64位系统(Ubuntu)上运行32位软件了
使用ldd <file-name>
命令可以检查是否有任何not found
的依赖库
在本机上可以看到所需动态库都是全的,运行没有问题
再到镜像中使用ldd
查看依赖情况:
可以看到是少了一些动态库依赖的,所以接下来我们尝试补全这些依赖
由于我们的镜像是基于 Alpine 3.15
的,所以这里我们使用apk add
把上面的依赖通通装上
最后再执行验证:
我们的系统终于能正常运行这个依赖文件了🥳
No such file or directory
问题可以按以下步骤排查:
file
命令确认)file
命令查看: ```shell
file lmgrd
lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
比如这里可以看到解释器`/lib64/ld-lsb-x86-64.so.3`,如果它不存在我们是无法运行该程序的,对这个例子来说解决方案就将是`sudo apt-get install lsb`
ldd
命令查看是否有缺失动态库依赖,并补全依赖原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。