7

I downloaded a Chromium snapshot and unzipped it, like this:

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

But when I try to run chrome, it isn't there...

michael@ubuntu:/opt/chrome-linux$ ./chrome
bash: ./chrome: No such file or directory

Does anyone know why it won't open? Running 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
Michael
  • 73

3 Answers3

8

You're missing 32-bit support. Install libc6:i386, i.e. the 32-bit base library package, and all the other 32-bit libraries that Chrome needs (it's likely to be close to the dependencies of the Chromium package).

When you fail to execute a file that depends on a “loader”, the error you get may refer to the loader rather than the file you're executing.

  • The loader of a dynamically-linked native executable is the part of the system that's responsible for loading dynamic libraries. It's something like /lib/ld.so or /lib/ld-linux.so.2, and should be an executable file.
  • The loader of a script is the program mentioned on the shebang line, e.g. /bin/sh for a script that begins with #!/bin/sh.

The error message is rather misleading in not indicating that the loader is the problem. Unfortunately, fixing this would be hard because the kernel interface only has room for reporting a numeric error code, not for also indicating that the error in fact concerns a different file.

Once you install the 32-bit dynamic loader /lib/ld-linux.so.2, which is in the libc6:i386 package, you will at least get a non-misleading error message telling you of the other missing libraries.

1

The fastest way to get to Gilles' solution is to install ia32-libs-multiarch. While this does pull in a lot of packages, it saves you the time to figure out all the different dependencies.

iGadget
  • 883
-1

First, check for missing libraries with ldd on the executable:

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)

Here, it's obvious that we are missing a library. Installing libgcc_s.so.1 fixed that. Now ldd looks entirely happy:

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)

However, that was just the beginning in my case. The symptom was still the same. Both strace and gdb would tell the same story:

strace "$(command -v lmutil)"
execve(/* 26 vars */) = -1 ENOENT (No such file or directory)
strace: exec: No such file or directory
+++ exited with 1 +++

Next, don't trust ldd. The file /lib/ld-lsb.so.3 is actually missing!

Moreover, no package on Ubuntu 23.04 provides it (as shown by an apt-file search). Actually not on Ubuntu 22.04 either, except there, I bisected it down to the lsb-core package. It appears that even though the package does not contain the file (as shown by dpkg -L), you get it (as a symlink) when installing the package. This package does not exist on Ubuntu 23.04, though, and the lsb-base package that it has instead does not give you that symlink.

Solution:

ln -s ld-linux.so.2 /lib/ld-lsb.so.3