在Ubuntu 20.04 x86_64系统运行32位二进制文件报错求助
在x86_64 Ubuntu 20.04运行32位二进制文件报错的解决方法
问题背景
尝试在x86_64架构的Ubuntu 20.04系统中运行一款旧的32位二进制文件,相关信息如下:
文件信息(file命令输出)
$ file /usr/local/diamond/3.13/modeltech/linuxloem/vsim /usr/local/diamond/3.13/modeltech/linuxloem/vsim: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b8557f9eb74b21146d0eba49769f30f475422d26, stripped
执行报错
$ /usr/local/diamond/3.13/modeltech/linuxloem/vsim bash: /usr/local/diamond/3.13/modeltech/linuxloem/vsim: No such file or directory
文件权限
$ ls -la /usr/local/diamond/3.13/modeltech/linuxloem/vsim -rwxr-xr-x 1 mwg mwg 7772676 Jul 18 2023 /usr/local/diamond/3.13/modeltech/linuxloem/vsim
使用sudo执行同样报错,推测缺少32位程序所需的动态链接器/lib/ld-linux.so.2,安装binutils未解决问题。
解决步骤
1. 安装32位运行时兼容库
Ubuntu 20.04默认不预装32位程序支持,需要先添加i386架构并安装核心32位库:
sudo dpkg --add-architecture i386 sudo apt update sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386
该操作会自动安装/lib/ld-linux.so.2动态链接器,以及32位程序运行必需的C标准库、终端库和C++标准库。
2. 验证动态链接器状态
安装完成后,检查链接器是否存在:
ls -l /lib/ld-linux.so.2
若输出类似lrwxrwxrwx 1 root root 10 日期 /lib/ld-linux.so.2 -> ld-2.31.so,说明链接器已就绪。
3. 排查缺失的依赖项
如果仍无法运行,用ldd命令检查程序的所有依赖是否齐全:
ldd /usr/local/diamond/3.13/modeltech/linuxloem/vsim
输出中标记为not found的条目即为缺失的依赖,安装对应的32位包(格式为包名:i386)即可。
4. 手动指定动态链接器运行(可选)
若上述方法无效,可尝试直接调用动态链接器启动程序:
/lib/ld-linux.so.2 /usr/local/diamond/3.13/modeltech/linuxloem/vsim
内容的提问来源于stack exchange,提问作者fsctl
相关产品推荐
相关产品推荐

