最近自己写的一个广告发布平台要迁移到Linux平台上,由于之前用的是windows平台的dll文件,现在要改用。so.讲下如何在Linux下面调用。so.
在linx下使用jna调用本地方法的时候,需要将C写成的程序编译为so文件
1、写一个简单test.c文件:
[cpp]
#include<stdio.h>
int add(int a,int b);
int add(int a,int b)
{
int c = a + b ;
return c ;
}
2、编译为so动态链接库:
[cpp]
gcc -fpic -c test.c
gcc -shared -o libtest.so test.o
ls看一下生成的文件:
libtest.so test.c test.o
这样就会生成so文件了。 这里为什么要命名为libtest.so而不是test.so呢?因为jna在找so文件的时候,要匹配前缀为lib的so文件
3、接下来开始写java文件(需要下载jna.jar),我们写一个TestSo.java:
[java]
import com.sun.jna.Library;
import com.sun.jna.Native;
public class TestSo {
public interface LgetLib extends Library {
// 调用linux下面的so文件,注意,这里只要写test就可以了,不要写libtest,也不要加后缀
LgetLib INSTANCE = (LgetLib) Native.loadLibrary("test",LgetLib.class);
int add(int a,int b);
}
public int add(int a,int b){
return LgetLib.INSTANCE.add(a,b);
}
public static void main(String[] args) {
TestSo ts = new TestSo();
int c = ts.add(10,20);
System.out.println("10+20="+c);
}
}