jna对dll&so的调用

dll&so的生成

dll生成方法:

用记事本(notepad++)打开一个空的c语言源代码页面,在其中按照c语言规范写几个简单函数:

#include<stdio.h>

void hello(){

printf("hello world!");

}

int suan(int a,int b){

int c;

c = a + b;

return c;

}

一、如果windows有安装gcc,则打开cmd,用cd打开到c源码目录,输入:

gcc -shared -o 文件名.dll 文件名.c  

即可获得dll文件。

二、如果windows没有装gcc,可以rz命令把源码上传到云服务器,因为linux默认自带gcc,所以可以直接编译。

Dll文件:gcc -fPIC -shared 文件名.c -o 文件名.dll

So文件:gcc -shared -fpic -o 文件名.so 文件名.c

然后可以用sz 文件名,这条命令再把dll下载回电脑上。

dll&so的环境配置

前往各大论坛下载jna.jar开发包,并新建一个java项目将jar包挂载上去。

 jna对dll&so的调用

 

在根目录下新建一个lib文件夹,并在项目名上右键打开项目配置目录。

选择source下的src文件夹,选中第三项双击点开

 jna对dll&so的调用

选择workspace,选择到项目的lib文件夹下

 

 jna对dll&so的调用

将自己写好的dll&so文件放到lib文件目录下。

dll&so的使用

新建一个interface(接口)文件,并让其继承Library接口。

范例代码如下:

import com.sun.jna.Library;

import com.sun.jna.Native;

 

public interface ceshi extends Library{

ceshi cc = Native.loadLibrary("dll或者so名字", ceshi.class);//声明引用文件名字

public void hello();//c源码所写的全部方法名,写出对应接口

public int suan(int a,int b);

}

#需要注意的是,c源码的方法名必须和这个声明类里面的一模一样,不然会报错,此外引用声明处不用写引用文件的后缀,只写名字就可以了。

 

搞定之后就要用其他函数调用试试看了,新建一个Main.class

输入以下代码测试:

import java.util.Scanner;

 

public class Main {

public static void main(String[] args) {

Scanner s = new Scanner(System.in);

int c = ceshi.cc.suan(s.nextInt(), s.nextInt());

System.out.println(c);

ceshi.cc.hello();

}

}

测试结果:

 jna对dll&so的调用

测试成功。