近日在添加一个镜像内依赖时,出现了令人非常困惑的现象:

明明依赖文件(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 删除。