Create a C Library



testLib.h

#ifndef TESTLIB
#define TESTLIB
    int foo(int a);
#endif



testLib.c

#include "testLib.h"
int foo(int a) {
    return a + 1;
}

gcc -c testLib.c -o testLib.o

Make it a dynamic lib

gcc -dynamiclib -undefined suppress -flat_namespace testLib.o -o libtestLib.dylib

Call our Library from Java

package com.test.jnr;
 
import jnr.ffi.LibraryLoader;
 
public class LibS {
 
    public static interface LibC {
        int foo(int i);
    }
 
 
    public static void main(String[] args) {
        LibC libc = LibraryLoader.create(LibC.class)
                .search("/Users/john.mehan/projects/bledata/cloud/services/cloud-service/src/main/java/com/irdeto/keystone/jni/testLib")
                .load("testLib");
 
        System.out.println("100 +1 = " + libc.foo(100));
 
    }
 
 
}

Call some standard LibC libraries

package com.test.jnr;
 
import jnr.ffi.LibraryLoader;
 
public class LibS {
 
    public static interface LibC {
        int puts(String s);
    }
 
    public static void main(String[] args) {
        LibC libc = LibraryLoader.create(LibC.class).load("C");
        libc.puts("Hello, World");
 
    }
}

  • No labels