[arch-general] Opera and Java on x86_64

Ondřej Kučera ondrej.kucera at centrum.cz
Wed Sep 30 16:15:56 EDT 2009


Hello,

I've been trying to figure out why Java applets wouldn't work on my 
system in Opera. (I'm using jre/jdk from [community], not openjdk6 from 
[extra].) From what I've found out: you set up a "Java directory" in 
Opera preferences (this path is then written to .opera/javapath.txt) and 
Opera looks for libjava.so there. At the same time Opera also looks for 
libjvm.so there (or it is the first place where Opera looks, more on 
that bellow). The problem is that jre package contains libjava.so in 
/opt/java/jre/lib/amd64/, while libjvm.so is in "server" subdirectory 
(/opt/java/jre/lib/amd64/server). That causes Opera not to find it and 
disable Java completely.

I ran strace and these are relevant lines to show where Opera tries to 
find libjvm.so:
open("/opt/java/jre/lib/amd64/libjvm.so", O_RDONLY) = -1 ENOENT (No such 
file or directory)
open("/usr/lib/opera/10.00/libjvm.so", O_RDONLY) = -1 ENOENT (No such 
file or directory)
open("/opt/java/jre/lib/amd64/libjvm.so", O_RDONLY) = -1 ENOENT (No such 
file or directory)
open("/opt/java/jre/lib/amd64//native_threads/libjvm.so", O_RDONLY) = -1 
ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 107
open("/lib/libjvm.so", O_RDONLY)        = -1 ENOENT (No such file or 
directory)
open("/usr/lib/libjvm.so", O_RDONLY)    = -1 ENOENT (No such file or 
directory)

This lead me to an idea of creating symlink to 
/opt/java/jre/lib/amd64/server/libjvm.so in /usr/lib/opera/10.00, which 
worked and now I can see applets in Opera properly. Now the question is, 
who's fault is it? Opera's? Jre's? And more importantly, can it be 
solved in a way that doesn't require users to create symlinks as root? 
Either opera package could create the aforementioned link, only that is 
ugly for those not using jre package. Or jre package could create the 
link into /opt/java/jre/lib/amd64/. Or maybe even move the files from 
the "server" subdirectory to the upper directory (there are only three 
of them and I have no idea why they are in such a subdirectory)?

Does anyone have a better idea? Perhaps adding 
/opt/java/jre/lib/amd64/server/ to LD_LIBRARY_PATH inside the opera 
shell script?

Ondřej


-- 
Cheers,
Ondřej Kučera


More information about the arch-general mailing list