在实际开发中经常会遇到java去调用别人提供的第三方接口,这种接口一般以动态库最为常见
在java中调用动态库有好几种方法:
下面我具体介绍用jna调用已有的第三方动态库
动态库是现成的,这里我写一个动态库,具体代码如下:
导出动态库的头文件
test.h
test.cpp
用 g++ -fPIC -shared test.cpp -olibtestadd.so 编译生成libtestadd.so文件
下面是java调用的代码
用javac编译运行即可
备注:windows下面的调用方法与此相同
另外 JNI调用动态库的时候需要用javah生成头文件然后在编译动态库这种方式比较麻烦,如果动态库是自己写的可以这么调用,否则第三方库无法用这种调用方式。
在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生成头文件然后在编译动态库这种方式比较麻烦,如果动态库是自己写的可以这么调用,否则第三方库无法用这种调用方式。