| What's happening here is that you are attempting to open a
-taso built shared object in the context of a non-taso built
program. You can't do this because it doesn't make any sense.
Java is built as a normal 64 bit application - we don't use any
of the taso switches or other 32 bit hacks. When you create a
native method, it gets placed into a shared object. When the
native method is invoked, the Java virtual machine attempts to
dlopen() the shared object, along with any other shared objects
needed to do the work. If dlopen() fails for some reason, then
Java calls dlerror() to get the error message produced. In this
case dlopen() fails for the reason given (cannot load TASO library
foo.so for non-TASO executable) and the game is over.
The reason dlopen() declines to open the taso'd shared object is
because it doesn't make any sense to do so in the context of
a full 64 bit program. Pointers in the non-taso built parts of the
program are probably going to be outside the 31 bit range defined
for taso'd pointers. Since the taso'd shared object expects the
pointer values to be in the range of 31 bits (31 is not a typo),
the segfault caused by bad pointer interaction would only be
a few instructions away.
It only makes sense to have taso'd shared objects when the program
which will dlopen() them is also taso'd.
Chris
[Posted by WWW Notes gateway]
|