Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Feb 1998 22:55:39 -0700
From:      Nate Williams <nate@mt.sri.com>
To:        Ian Grigg <iang@systemics.com>
Cc:        freebsd-java@FreeBSD.ORG
Subject:   Re: jdk115 JNI requires ELF, gcc makes a.out
Message-ID:  <199802030555.WAA00791@mt.sri.com>
In-Reply-To: <34D6A37E.29B3C1AE@systemics.com>
References:  <199802021801.MAA06681@damon.com> <34D6A37E.29B3C1AE@systemics.com>

next in thread | previous in thread | raw e-mail | index | archive | help
> will soon rival the JDK :-).  I'm now seeing useful debugging, and I get
> this:
> 
>   cannot stat
> "/usr/local/apps/java/java/bin/../lib/i386/green_threads//home/iang/src/helplets/current/native/build/x86-freebsd/libBlowfish.so"
> : No such file or directory
> (/home/iang/src/helplets/current/native/build/x86-freebsd/libBlowfish.so)
>   java.lang.UnsatisfiedLinkError:
> /home/iang/src/helplets/current/native/build/x86-freebsd/libBlowfish.so
> ...

Hmm, I have an idea what might be causing this, but my *very simple*
test code appears to work fine loading libraries:

public class Lib {
   public static void main(String args[]) {
       new Lib();
   }

   static {
       try {
           System.load("/usr/lib/libz.so.2.0");
           System.out.println("Library loaded...");
       } catch (Exception e) {
           System.err.println("Error:" + e);
       }
   }
}

> System.load("/home/iang/src/helplets/current/native/build/x86-freebsd/libBlowfish.so");
> 
> (sorry about the long names...).

No problem.

> It is insisting on turning the absolute pathname into one relative to
> /usr/local/apps/java/java/bin/../lib/i386/green_threads/

I have an idea what might be causing that, but I wouldn't think it would
be doing that in the Java code.

> Now, I can fix this by setting LD_LIBRARYPATH to the current dir and
> using a relative path:
> 
>   $ LD_LIBRARY_PATH=$PWD java Blowfish.BlowfishNative
> build/x86-freebsd/libBlowfish.so
> 
>   BlowNat: load: build/x86-freebsd/libBlowfish.so
>   BlowNat: lib loaded successfully.
>   BlowNat: Loaded.
>   BlowNat: FAILED: java.lang.UnsatisfiedLinkError: getLibMajorVersion
> 
> Which gets us nicely up to (my) next bug.

I'm assuming the UnsatisfiedLinkErro is yours and not ours, right?

> However, that is the relative
> case, not the absolute case, the absolute still fails:

As above, right.

> Perhaps I'd better throw some questions in:
> 
>    * is "complete" synonymous with absolute?

Totally qualified, and not relative.  (Absolute works too.)

>    * is this a bug, or a misinterpretation?

Possibly the former.

>    * should I be using System.loadLibrary?

No.

>    * can I use absolute, relative, or what?

Absolute (according to the docs.)

> Note that at this stage I can survive, as a relative solution is fine. 
> But I'd like to know what the end verdict is, for the doco.

However, I *believe* that it will pull things out of the LD_LIBRARY_PATH
if you don't specify the entire path.  So, using my above if I set the
LD_LIBRARY_PATH to /usr/lib, I can do:

           System.load("libz.so.2.0");

And it will work.  (If I don't set the LD_LIBRARY_PATH, by default it is
set to /usr/local/jdk1.1.5/lib/i386/green_threads).

But, if you give it the absolute path, it *should* work.

Any chance of having you simplifying your test program into less than
100 lines? *grin*




Nate



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199802030555.WAA00791>