linux系统下,使用JNA库实现Java调用C

说明:我是在ubuntu下做这个实验的

第一步:编写C语言动态链接库,test.c
#include<stdio.h>
int add(int a,int b);
int add(int a,int b)
{
      int c = a + b ;
      return c ;
}


第二步:编译动态链接库
gcc -fpic test.c -shared -o libtest.so



第三步:将libtest.so文件放入到工程的根目录上


第四步:下载jna.jar包
https://github.com/twall/jna

第五步:创建工程,并导入jna.jar包到工程里(这个看你是eclipse还是netbeans或者纯记事本了,不会导入jar包的去百度问)

第六步:写java代码

package javajna;


import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import java.io.UnsupportedEncodingException;


/**
*
* @author lin
*/
public class JavaJNA {


    //定义接口CLibrary,继承自com.sun.jna.Library
    public interface CLibrary extends Library
    {
        //定义并初始化接口的静态变量
        CLibrary INSTANCE=(CLibrary)Native.loadLibrary((Platform.isWindows()?"msvcrt":"c"),CLibrary.class);


        //printf函数声明
        void printf(String format, Object... args);
    }
    
    public interface LibTest extends Library {
        LibTest INSTANCE = (LibTest) Native.loadLibrary("test", LibTest.class);
        int add(int x, int y);
    }
    
    
    public static void main(String[] args) throws UnsupportedEncodingException
    {
        // 调用自定义函数
        int ret = LibTest.INSTANCE.add(12, 8);
        System.out.println(ret);
        
        //调用printf打印信息
        CLibrary.INSTANCE.printf("Hello, JNA!\r\n");
    }
    
}

你可能感兴趣的:(linux系统下,使用JNA库实现Java调用C)