Thanks so much lvh.

Your Youtube presentation was one of the main reasons I chose JNI-FFI :-)

I did not consider looking into Caesium, let alone the source code: 
probably, because my current work does not involve cryptography. Thank you 
so much for the github link to the repo. Looking at the source code I found 
it very useful. It gave me all sorts of ideas to move forward :-)

On Friday, December 4, 2020 at 4:37:47 PM UTC+1 Laurens Van Houtven wrote:

> Hi,
>
> I did a talk on this and conveniently my library caesium wraps the library 
> you're referencing :)
>
> https://www.youtube.com/watch?v=Lf-M1ZH6KME
> https://github.com/lvh/caesium/
>
> I still think that approach is great particularly for libraries like 
> libsodium where some care was taken to make them easy to FFI. That is 
> typically less true for more complex, often C++, libraries. In that case I 
> would consider JavaCPP, where you basically do more up front work to tell 
> it how it works and it generates JNI for you (up front, not dynamically 
> like jnr). Which one I'd recommend depends on what you're binding. Like I 
> said, for libsodium I think jnr is probably easier to use.
>
> lvh
>
> On Fri, Dec 4, 2020 at 8:53 AM John Doe <buffer...@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 clo...@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+u...@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+u...@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/411271e2-ad5d-45bf-a328-a471a5ac78bcn%40googlegroups.com.

Reply via email to