I'm trying to use Clojure to call a library via JNI. Here's a working
piece of Java code that I'm trying to convert to Clojure:

    import libfoo.Foo;  // A GlueGen-generated wrapper

    class Test {
        static {
            System.loadLibrary("foo");      // The original library
            System.loadLibrary("foojni");   // A GlueGen-generated wrapper
        }

        public static void main(String[] args) {
            Foo.do_nothing();
        }
    }

Here's my Clojure conversion:

    (import '(libfoo Foo))

    (System/loadLibrary "foo")
    (System/loadLibrary "foojni")

    (Foo/do_nothing)

Running this Clojure program results in:

    java.lang.UnsatisfiedLinkError: libfoo.Foo.do_nothing()V
    (test.clj:0)

as if the library wasn't dynamically linked at all.

The Clojure code works if I copy the static block from my Java client
code into the GlueGen generated Java class, and remove the
System/loadLibrary calls from the Clojure client.

If the libraries are loaded in the static block of the Java wrapper
class, calling System/loadLibrary in Clojure results in:

    java.lang.UnsatisfiedLinkError: Native Library <snip>/libfoo.so
    already loaded in another classloader (test.clj:0)

Is there a working equivalent of System.loadLibrary() in the Clojure
API? I tried to google for it, but couldn't find anything.

Thanks,
--
Timo

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to