ia32-libs on Ubuntu 9.10 (think it's a bug)

Asked by pelatrix

 It seems that ia32-libs are calling 64bits libraries.

 I'm trying to run EPF (Eclipse Framework Composer) on my 64bits Ubuntu 9.10. I know it's a 32bits/java 1.5 app, and according to instructions read on the epf's page, I run it from the terminal doing this (I've installed ia32-libs):

$export LD_LIBRARY_PATH=/usr/lib32
$./epf -vm /home/lucas/bin/jdk1.5.0_22/bin/

 The applications starts, but it logs the following on the terminal:

 /usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
/usr/lib/gio/modules/libgiogconf.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgiogconf.so
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so

 I know It's a common problem, but I can't find the right answer. So I thought it was a problem with LD_LIBRARY_PATH (that I was setting it badly) So I use LD_DEBUG=file, to see if epf was really using the /usr/lib32 given on LD_LIBRARY_PATH, and it was. Reading the output, I found this:

      4589: file=/usr/lib/gio/modules/libgvfsdbus.so [0]; needed by /usr/lib32/libgmodule-2.0.so.0 [0]
/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
      4589:
      4589: file=/usr/lib/gio/modules/libgiogconf.so [0]; needed by /usr/lib32/libgmodule-2.0.so.0 [0]
/usr/lib/gio/modules/libgiogconf.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgiogconf.so
      4589:
      4589: file=/usr/lib/gio/modules/libgioremote-volume-monitor.so [0]; needed by /usr/lib32/libgmodule-2.0.so.0 [0]
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so

 I don't know how ia32-libs works... and the hole library system :p , but It seems to be extrange that 32bits libraries are calling 64bits libraries.... It's that correct? Or It's bug? Can I fix it from the comand line or something like that?

 Thanks in advance.

 Lucas Brugé.

Question information

Language:
English Edit question
Status:
Answered
For:
Ubuntu ia32-libs Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
actionparsnip (andrew-woodhead666) said :
#1

If the 32bit libs are not part of the ia32-libs you will need to manually download the 32bit deb, extract it then copy the lib to /usr/lib32

You will most likely find that the file is NOT there so the system will default to the 64bit lib folder and cause the issue you are getting.

Revision history for this message
pelatrix (lucasbruge) said :
#2

 Thanks for answer, actionparsnip, I really appreciate it.

 I don't know if I'm checking for the libraries in the right way. I'm trying this, with locate:

lucas@viki:~$ locate libgvfsdbus.so
/usr/lib/gio/modules/libgvfsdbus.so
/usr/lib32/gio/modules/libgvfsdbus.so

lucas@viki:~$ locate libgiogconf.so
/usr/lib/gio/modules/libgiogconf.so
/usr/lib32/gio/modules/libgiogconf.so

lucas@viki:~$ locate libgioremote-volume-monitor.so
/usr/lib/gio/modules/libgioremote-volume-monitor.so
/usr/lib32/gio/modules/libgioremote-volume-monitor.so

 Then, I re-check using the "file" command over each file, and I get something like this: (for all of them)
/usr/lib32/gio/modules/libgioremote-volume-monitor.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped.

 I'm Sorry if I bother you because I'm doing something wrong, but the files seems to be ok.... or not, what do you think?

 Can I try something different?
 Thanks again...

Revision history for this message
actionparsnip (andrew-woodhead666) said :
#3

Looks fine to me, looks like you have all the files, I am not sure how you set the lib file, you may want to check

export LD_LIBRARY_PATH=/usr/lib32

is correct. Just in case

Revision history for this message
pelatrix (lucasbruge) said :
#4

Thanks again... I recently re-check that, and still the same result:

lucas@viki:~/bin/epf-composer$ export LD_LIBRARY_PATH=/usr/lib32
lucas@viki:~/bin/epf-composer$ ./epf -vm /home/lucas/bin/jdk1.5.0_22/bin/
/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
/usr/lib/gio/modules/libgiogconf.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgiogconf.so
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so

...so, there's something I can do? Should I report it as bug? ... do you need my system specs? (wichones, if that the case)

Revision history for this message
Daniel Letzeisen (dtl131) said :
#5

"wrong ELF class: ELFCLASS64"
This is what a 32-bit program outputs when it looks for 32-bit shared libraries and only finds 64-bit ones. To make those warnings go away, you would need 32-bit versions of the appropriate libs in /usr/lib32/. This is nothing to worry about or report unless it's causing issues, in which case you can use a program like getlibs to obtain 32-bit libraries not offered in the repos.

Revision history for this message
pelatrix (lucasbruge) said :
#6

Thanks for your answer, Dave.

 It's seems that I'm missing something (honestly)... I think I have the 32bits libraries (in the right place), like I said on my second message, because they came with ia32-libs.
 The problem, from my point of view, is that the 32bits libraries that came with ia32-libs (/usr/lib32/libgmodule-2.0.so.0) are calling 64bits libraries (/usr/lib/gio/modules/libgvfsdbus.so) when I got the 32bits libraries (/usr/lib32/gio/modules/libgvfsdbus.so) and the LD_LIBRARY_PATH points to that place (/usr/lib32/). It's seems like the 32bits libraries (/usr/lib32/libgmodule-2.0.so.0) where badly linked or something like that (could it be?)... or I'm missing something...

 So, I'll try to put it some kind points:

 1) The 32bits libraries came with is32-libs, and they are at:
  /usr/lib32/gio/modules/libgvfsdbus.so
  /usr/lib32/gio/modules/libgiogconf.so
  /usr/lib32/gio/modules/libgioremote-volume-monitor.so

  2) I've checked that they really are 32bits with the file command, getting this similar output for all of them:
/usr/lib32/gio/modules/libgioremote-volume-monitor.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped.

  3) then I set LD_LI=BRARY_PATH=/usr/lib32/

  4) and finally, when I run the program, the 32bits libraris are still calling the 64bit libraries, like "LD_DEBUG=file" is showing me:
      4589: file=/usr/lib/gio/modules/libgvfsdbus.so [0]; needed by /usr/lib32/libgmodule-2.0.so.0 [0]
/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
      4589:
      4589: file=/usr/lib/gio/modules/libgiogconf.so [0]; needed by /usr/lib32/libgmodule-2.0.so.0 [0]
/usr/lib/gio/modules/libgiogconf.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgiogconf.so
      4589:
      4589: file=/usr/lib/gio/modules/libgioremote-volume-monitor.so [0]; needed by /usr/lib32/libgmodule-2.0.so.0 [0]
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so

 Once again, and please don't take it the bad way, because I'm trying to understand (and learn) what's going on. I think I have the right libraries in the right place with the right enviroment, but 32bits libraries ignores the LD_LIBRARY_PATH and they'r acting weird (when they still calling the 64bits libs). If I'm wrong, could you please tell me where? or what should I'll try?

 And once again, thanks for your time (Dave).

 Lucas.

Revision history for this message
Daniel Letzeisen (dtl131) said :
#7

Oh, I see. I should have read your other post more carefully. One thing you could try doing is creating symbolic links in /usr/lib32

cd /usr/lib32
sudo ln -s /usr/lib32/gio/modules/libgvfsdbus.so
sudo ln -s /usr/lib32/gio/modules/libgiogconf.so
sudo ln -s /usr/lib32/gio/modules/libgioremote-volume-monitor.so

Revision history for this message
pelatrix (lucasbruge) said :
#8

Thanks again, Dave.

 I ran the commands you suggested, and got the same results:

/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
/usr/lib/gio/modules/libgiogconf.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgiogconf.so
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so

 Then I try it with LD_DEBUG=files, and got the same results.

 It seems like a linkage problem on /usr/lib32/libgmodule-2.0.so.0 ... beacuse that library is the one who's calling the 64bits libs... could it be?

 Thanks again,

Revision history for this message
Daniel Letzeisen (dtl131) said :
#9

I should have told you to run:
sudo ldconfig
to update after you did that. So run that and try again.. ;)

FYI, none of the libraries are calling 64-bit libraries. They're 32-bit libraries calling other libraries (which also need to be 32-bit). THe system searches the paths for files of that name, and if it finds a 64-bit version, it prints an error to let you know why it skipped that file.

Revision history for this message
pelatrix (lucasbruge) said :
#10

 Thanks again, Dave.

 I ran it again, this time with the "sudo ldconfig", and got the same results.

 Thanks for your explanation, I was thinking it on that way; so that's why I presumed that LD_LIBRARY_PATH would help me, to "force" that path... I think it's really extrange what is happening for thi particular line (from running it with LD_DEBUG=files)

4589: file=/usr/lib/gio/modules/libgvfsdbus.so [0]; needed by /usr/lib32/libgmodule-2.0.so.0 [0]
 /usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so

 What my ignorance let see here ;) it's that the "/usr/lib32/libgmodule-2.0.so.0" needs for the 32buts version of "libgvfsdbus.so" , but the systems finds the 64bits version first.... is that ok? (about the problem description, I mean)? So, LD_LIBRARY_PATH should avoid it this behavior?

 Once again... thanks!

 (I'm sorry about my writting, but I'm doing the best I can... thanks for that too)

 Lucas.

Revision history for this message
Daniel Letzeisen (dtl131) said :
#11

Trix are for kids.

Revision history for this message
Michael Becker (michael-becker-caterdev) said :
#12

I came across the same problem and was finally able to run the epf composer. The one thing I didn't think about was using a 32 Bit JDK. So I downloaded it and it worked. Maybe this tip helps you.

Revision history for this message
weishigoname (weishigoname) said :
#13

I got the problem too ,many 32bits software I started in ubuntu9.10-amd64 got these message , OR one or two of them.they try link the library in /usr/lib/gio/modules/ directory ,but they are 64bits
           ws@ws-laptop:/usr/lib/gio/modules$ ls
              i386-pc-linux-gnu i686-pc-linux-gnu libgioremote-volume-monitor.so
             i486-pc-linux-gnu libgiogconf.so libgvfsdbus.so
my computer ,this directory have 32bits directoty,I think they do not come to use.no 32bits software can link the libraries in these 32bits directory.how they come to use ? how these 32bits software try to link the libraries they need ? are there any configure files to change that ?

Revision history for this message
actionparsnip (andrew-woodhead666) said :
#14

You will need to satisfy lib dependencies manually, download and extract the debs and copy the .so file to /usr/lib32 which is where the apps will look for the lib files.

The files in /lib/lib64 will be 64bit but the /usr/lib32 files will be used when you run 32bit apps.

Revision history for this message
weishigoname (weishigoname) said :
#15

it does not work ,I link the 32bits library to /usr/lib32
ws@ws-laptop:/usr/lib32$ ls -l | grep libgioremote-volume-monitor.so
lrwxrwxrwx 1 root root 44 2010-03-16 17:59 libgioremote-volume-monitor.so -> ./gio/modules/libgioremote-volume-monitor.so
ws@ws-laptop:/usr/lib32$ ls -l | grep libgiogconf.so
lrwxrwxrwx 1 root root 28 2010-03-16 17:59 libgiogconf.so -> ./gio/modules/libgiogconf.so
ws@ws-laptop:/usr/lib32$ ls -l | grep libgvfsdbus.so
lrwxrwxrwx 1 root root 28 2010-03-16 17:59 libgvfsdbus.so -> ./gio/modules/libgvfsdbus.so
"./gio/modules" is /usr/lib32/gio/modules/
and then

ws@ws-laptop:~/Downloads/app/realplay-code$ realplay
/usr/lib/gio/modules/libgiogconf.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgiogconf.so
/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so

see ,it can not link the libraries in /usr/lib32

Revision history for this message
weishigoname (weishigoname) said :
#16

it does not work ,I link the 32bits library to /usr/lib32
ws@ws-laptop:/usr/lib32$ ls -l | grep libgioremote-volume-monitor.so
lrwxrwxrwx 1 root root 44 2010-03-16 17:59 libgioremote-volume-monitor.so -> ./gio/modules/libgioremote-volume-monitor.so
ws@ws-laptop:/usr/lib32$ ls -l | grep libgiogconf.so
lrwxrwxrwx 1 root root 28 2010-03-16 17:59 libgiogconf.so -> ./gio/modules/libgiogconf.so
ws@ws-laptop:/usr/lib32$ ls -l | grep libgvfsdbus.so
lrwxrwxrwx 1 root root 28 2010-03-16 17:59 libgvfsdbus.so -> ./gio/modules/libgvfsdbus.so
"./gio/modules" is /usr/lib32/gio/modules/
and then

ws@ws-laptop:~/Downloads/app/realplay-code$ realplay
/usr/lib/gio/modules/libgiogconf.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgiogconf.so
/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so

see ,it can not link the libraries in /usr/lib32

Revision history for this message
weishigoname (weishigoname) said :
#17

it does not work ,I link the 32bits library to /usr/lib32
ws@ws-laptop:/usr/lib32$ ls -l | grep libgioremote-volume-monitor.so
lrwxrwxrwx 1 root root 44 2010-03-16 17:59 libgioremote-volume-monitor.so -> ./gio/modules/libgioremote-volume-monitor.so
ws@ws-laptop:/usr/lib32$ ls -l | grep libgiogconf.so
lrwxrwxrwx 1 root root 28 2010-03-16 17:59 libgiogconf.so -> ./gio/modules/libgiogconf.so
ws@ws-laptop:/usr/lib32$ ls -l | grep libgvfsdbus.so
lrwxrwxrwx 1 root root 28 2010-03-16 17:59 libgvfsdbus.so -> ./gio/modules/libgvfsdbus.so
"./gio/modules" is /usr/lib32/gio/modules/
and then

ws@ws-laptop:~/Downloads/app/realplay-code$ realplay
/usr/lib/gio/modules/libgiogconf.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgiogconf.so
/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so

see ,it can not link the libraries in /usr/lib32

Revision history for this message
Rob Clark (rob-ti) said :
#18

I think the problem is that the 32bit libgio in glib has GIO_MODULE_DIR as /usr/lib/gio/modules instead of /usr/lib32/gio/modules

I'm not sure of any work-around.. 'export GIO_EXTRA_MODULES=/usr/lib32/gio/modules' might partially work.. although it only looks at this environment variable *after* having tried to load the modules from GIO_MODULE_DIR.

Revision history for this message
Rob Clark (rob-ti) said :
#19

although, fwiw, this comment in a related bug provides an interesting work-around:

 https://bugs.launchpad.net/ubuntu/+source/ia32-libs/+bug/190227/comments/5

Revision history for this message
Vangelis Tasoulas (cyberang3l) said :
#20

Anyone solved this for realplayer?

$ realplay
/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so
/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so
/usr/lib/gio/modules/libgioremote-volume-monitor.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgioremote-volume-monitor.so

Revision history for this message
actionparsnip (andrew-woodhead666) said :
#21

This is why it gets messy. You need to manually download the deb for each file, extract it and place the .so file in /usr/lib32
You need the 32bit gvfs deb file for your release

You can extract a deb with:
ar vx packagename.deb

You can download the deb from:
http://packages.ubuntu.com/

Is this what you did??

Revision history for this message
Vangelis Tasoulas (cyberang3l) said :
#22

I know, but that file exists in the /usr/lib32/ already!!!

If I make a symbolic link of /usr/lib32/gio/modules/ into /usr/lib/gio/modules/ and then open the program, I don't get these errors!!

Sound of the realplayer stream still doesn't work though, but at least I don't get any console errors...

By the way I am in 10.10 and not 9.10 as the initial bug report.

Can you help with this problem?

Provide an answer of your own, or ask pelatrix for more information if necessary.

To post a message you must log in.