With regard to eclipse not being able to find adb
, etc, this because without the 32-bit shared libraries needed to run them on the system, they are not executable.
With regard to 32-bit libraries, the situation is fairly simple: you just need to install the appropriate 32-bit libs. On the 64-bit fedora 17 install I have here, the primary 64-bit libraries are in /usr/lib64 and optional 32-bit libs are in /usr/lib. So, if I call ldd
on on sdk/platform-tools/adb:
linux-gate.so.1 => (0xf7791000)
librt.so.1 => /lib/librt.so.1 (0xf776c000)
libncurses.so.5 => /lib/libncurses.so.5 (0xf7747000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf772d000)
libstdc++.so.6 => /lib/libstdc++.so.6 (0xf7644000)
libm.so.6 => /lib/libm.so.6 (0xf7618000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf75fb000)
libc.so.6 => /lib/libc.so.6 (0xf7449000)
/lib/ld-linux.so.2 (0xf7792000)
libdl.so.2 => /lib/libdl.so.2 (0xf7444000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0xf7424000)
Notice these are all in /lib, which is a symlink to /usr/lib (not /usr/lib64). Look:
»file /lib/libc.so.6
/lib/libc.so.6: symbolic link to `libc-2.15.so'
»file /lib/libc-2.15.so
/lib/libc-2.15.so: ELF 32-bit LSB shared object [...]
A 32-bit standard C library. What you can do is go through the 32-bit sdk tools and check to see what they are linked against with ldd
. I don't have an example at hand, but if something is missing ldd
reports something like:
libc.so.6 => ??????
First, tho, for ldd to work you will need the 32-bit loader that comes with the 32-bit glibc (without this, ldd will call it a non-executable file and tell you nothing):
»yum search glibc
glibc.i686 : The GNU libc libraries
glibc.x86_64 : The GNU libc libraries
That's truncated, but the x86_64 package is what you have already; the i686 is the 32-bit version. So just install that.
You do not need any of the 'devel' packages, as nothing gets compiled. Beyond that, educated guesses and yum whatprovides
/ yum search
should help (looking at the list for adb, there's also 32-bit versions of the C++ lib, ncurses, pthreads, and a I few things I don't know).
Quick tip about using whatprovides
:
»yum whatprovides libtinfo
No matches found.
»yum whatprovides libtinfo.so.5
[2 matches]
»yum whatprovides "*/libtinfo.so.5"
[4 matches]
;)
Best Answer
You can't do that directly on Linux on x86_64 with a 32bit kernel. You need a 64bit kernel to be able to run 64bit code. (Note: kernel. You can have 32bit userland running on a 64bit kernel, and install support for 64bit binaries. How easy this is depends on the distribution. Example here for Debian.)
Some virtualization software is able to do that (with restrictions on the type of CPU you're using), and emulators can do that too. But to run it natively you'll need a 64bit kernel.
Since most 64bit distributions out there have 32bit support (either by default or installable), that's what you should be using if you need to run both 64bit and 32bit binaries on the same OS.