Comment 40 for bug 190227

Revision history for this message
Peter Cordes (peter-cordes) wrote :

> Now, am I to undestand that, at least in my case, the error message
> Gtk-Message: Failed to load module "gail": /usr/lib/gtk-2.0/modules/libgail.so: wrong ELF class: ELFCLASS64
> was caused by libgail being a 32bit library and not compatible with amd64 architecture?

amd64 Linux kernels support ia32 processes running in 32bit compatibility mode. From the point-of-view of the 32bit process, it's pretty much the same as running under a 32bit (i386 architecture) kernel. (This is now called legacy mode on).

http://en.wikipedia.org/wiki/Long_mode
http://developer.amd.com/pages/123200367.aspx

 So yeah, when the dynamic linker in a 32bit process tries to load a shared library compiled for a different architecture, it returns an error, because it detected that the library is for a different architecture than the process. Just like if the file was a PowerPC or SPARC library.

 The kernel knows whether to run a process in 32 or 64 bit mode by looking at the same ELF headers that libraries have, and that file(1) will show you.

llama$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, ...

tesla$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, ...

file works on share libs, too, of course.