JAVA调用动态库

在实际开发中经常会遇到java去调用别人提供的第三方接口,这种接口一般以动态库最为常见
在java中调用动态库有好几种方法:
下面我具体介绍用jna调用已有的第三方动态库

动态库是现成的,这里我写一个动态库,具体代码如下:
导出动态库的头文件
test.h

#ifndef TEST_H
#define TEST_H
#ifdef __cplusplus
extern "C"
{
#endif
int add (int a,int b);
#ifdef __cplusplus
}
#endif
#endif


test.cpp
#include "test.h"
int add(int a,int b)
{

return a+b;
}



用 g++ -fPIC -shared test.cpp -olibtestadd.so 编译生成libtestadd.so文件
下面是java调用的代码

import com.sun.jna.Native;
import com.sun.jna.Library;
public class JavaTestdll {

	public interface idll extends Library{
		idll instens=(idll)Native.loadLibrary("testadd", idll.class);
		public int add(int a,int b); 
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(idll.instens.add(3, 4));
	}

}



用javac编译运行即可

备注:windows下面的调用方法与此相同

另外 JNI调用动态库的时候需要用javah生成头文件然后在编译动态库这种方式比较麻烦,如果动态库是自己写的可以这么调用,否则第三方库无法用这种调用方式。

你可能感兴趣的:(JNA,jnative,java调用so)