我下载了 Chromium 快照并将其解压缩,如下所示:
michael@ubuntu:/opt/chrome-linux$ ls
chrome libffmpegsumo.so nacl_irt_x86_32.nexe
chrome.1 libppGoogleNaClPluginChrome.so product_logo_48.png
chrome_100_percent.pak locales resources
chrome.pak nacl_helper resources.pak
chrome_sandbox nacl_helper_bootstrap xdg-mime
chrome-wrapper nacl_irt_srpc_x86_32.nexe xdg-settings
但当我尝试运行的时候chrome
,它却不存在......
michael@ubuntu:/opt/chrome-linux$ ./chrome
bash: ./chrome: No such file or directory
有人知道为什么它打不开吗?运行 Xubuntu 12.10 AMD64。
michael@ubuntu:/opt/chrome-linux$ ldd /opt/chrome-linux/* | grep -i "not found"
ldd: /opt/chrome-linux/locales: not regular file
ldd: /opt/chrome-linux/resources: not regular file
答案1
您缺少 32 位支持。安装libc6:i386
即 32 位基础库包,以及 Chrome 所需的所有其他 32 位库(它可能接近于Chromium 包)。
当您无法执行依赖于“加载器”的文件时,您收到的错误可能指的是加载器而不是您正在执行的文件。
- 动态链接本机可执行文件的加载器是系统的一部分,负责加载动态库。它类似于
/lib/ld.so
或/lib/ld-linux.so.2
,并且应该是可执行文件。 - 脚本的加载器是舍邦行,例如
/bin/sh
以 开头的脚本#!/bin/sh
。
错误消息相当具有误导性,没有表明加载器是问题所在。不幸的是,修复这个问题会很困难,因为内核接口只能报告数字错误代码,而不能表明错误实际上涉及另一个文件。
/lib/ld-linux.so.2
一旦您安装了包中的32 位动态加载器,libc6:i386
您至少会收到一条非误导性错误消息,告诉您其他缺少的库。
答案2
获得 Gilles 解决方案的最快方法是安装ia32-libs-多架构.虽然这确实吸引了很多包,它可以节省您弄清楚所有不同依赖关系的时间。
答案3
首先,检查ldd
可执行文件中是否缺少库:
ldd "$(command -v lmutil)"
linux-gate.so.1 (0xf7ee3000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7ed0000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7dc9000)
libgcc_s.so.1 => not found
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7b6a000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7b65000)
/lib/ld-lsb.so.3 => /lib/ld-linux.so.2 (0xf7ee5000)
这里,很明显我们缺少一个库。安装 libgcc_s.so.1 解决了这个问题。现在ldd
看起来完全正常:
linux-gate.so.1 (0xf7ee3000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7ed0000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7dc9000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7d9d000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7b6a000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7b65000)
/lib/ld-lsb.so.3 => /lib/ld-linux.so.2 (0xf7ee5000)
然而,这只是我的情况的开始。症状仍然相同。strace
和gdb
都讲述了相同的故事:
strace "$(command -v lmutil)"
execve(/* 26 vars */) = -1 ENOENT (No such file or directory)
strace: exec: No such file or directory
+++ exited with 1 +++
接下来,不要相信ldd
。该文件/lib/ld-lsb.so.3
实际上丢失了!
此外,Ubuntu 23.04 上没有软件包提供它(如 所示apt-file search
)。实际上 Ubuntu 22.04 上也没有,除了那里,我将其分为软件包lsb-core
。看起来,即使软件包没有包含该文件(如 所示dpkg -L
),安装软件包时您会获得它(作为符号链接)。但是,Ubuntu 23.04 上不存在此软件包,而lsb-base
它所拥有的软件包不会为您提供该符号链接。
解决方案:
ln -s ld-linux.so.2 /lib/ld-lsb.so.3