Ngwua, Looking through the caesium bindings just mentioned, it appears the author dynamically creates an interface and then you can simply ask the native library to instantiate a concrete implementation of that interface <https://github.com/lvh/caesium/blob/master/src/caesium/binding.clj#L701>. So you do not always have to create a class with 'native' methods.
Integrating with C libraries is part of the reason I wrote dtype-next <https://github.com/cnuernber/dtype-next> which has the ability to efficiently write/read from either java heap or native heap storage. dtype-next has no dependency on either JNA or JNR. Hope this helps, Chris On Fri, Dec 4, 2020 at 7:53 AM John Doe <bufferlogh...@gmail.com> wrote: > Hello Everyone, > > *Motivation:* I want to invoke C-code functions from Clojure: writing > Java functions in Clojure. > > *Plan of Attack:* Rather than go with the JNI approach I want to > interface with C-Library via JNR-FFI (https://github.com/jnr/jnr-ffi) > > Based on some example of using JNR-FFI > > https://github.com/jnr/jnr-ffi-examples/blob/master/getpid/src/main/java/getpid/Getpid.java > > https://www.programcreek.com/java-api-examples/?api=jnr.ffi.LibraryLoader > > The wrapper in Java might look like > ``` > package blahblah; > > public class BlahNative { > private static int[] intDummy; > private static double[] doubleDummy; > > public BlahNative() { > } > > public static native void native_a(char var0, char var1, int var2, int > var3, int var4, double[] var7, int var8, int var9); > > static { > lib = LibraryLoader > .create(LibSodium.class) > .search("/usr/local/lib") > .search("/opt/local/lib") > .search("/usr/lib") > .search("/lib") > .load(LIBRARY_NAME); > initializeLibrary(lib); > } > } > ``` > > Question: For my package > ``` > (defproject mypkg > :dependencies [[org.clojure/clojure "1.10.1"] > [com.github.jnr/jnr-ffi "2.2.0"]]) > ``` > How do I write the wrapper for the native functions in > ``` > (ns mypkg.native > (:import [jnr.ffi LibraryLoader]) > (:import [jnr.ffi.annotations IgnoreError]) > (:import [jnr.ffi.provider FFIProvider])) > ``` > For the Java interop I am assuming the above namespace should be based on > gen-class (http://clojure-doc.org/articles/language/interop.html). > > What is not clear to me is: > *1. How does one create the `native` method* (since most (defn foo) are > static methods)? > *2. How do I access the native functions after loading* the Native > Library (LibraryLoader.load(LIBRARY_NAME))? > > I am neither a C nor a Java expert so any guidance will be much > appreciated. > > Thanks, > Ngwua > > -- > 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 > Note that posts from new members are moderated - please be patient with > your first post. > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clojure/3bd05d7a-297e-49cf-86d4-aec4a88c83cbn%40googlegroups.com > <https://groups.google.com/d/msgid/clojure/3bd05d7a-297e-49cf-86d4-aec4a88c83cbn%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- 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 Note that posts from new members are moderated - please be patient with your first post. 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/CADbpEJuH5i3Py17byfRR5zoiXUXFWzk-xLtX6iLzGRmnoHyb6g%40mail.gmail.com.