LINUX下JNI封装 C++动态链接库

这几天用jni封装了一个C++库文件,供java调用,在此把具体的步骤给理一下,方便自己温故,也供大家参考。
前提:已有一个动态库文件libTest.so和包含函数声明的头文件test.h。

1. 创建java项目:JProj
在头文件test.h中包含了类类型和接口函数。如头文件test.h:

#ifndef TEST_H
#define TEST_H

typedef struct _ST_1
{
    int *a;
    long b;
    char c;
}ST1;

typedef struct _ST_2
{
    int a[];
    ST1 b; 
}ST2;

typedef struct _ST_3
{
    ST1 a[];
    ST2 b;
    int *c;
    string d;
}ST3;
void *func1(int a,ST1 b);
void func2(void *a,ST2 &b);
int func3(int *a,ST3 *b);
#endif // TEST_H

为了能在java程序中调用相关的接口,我们也需要在java中创建相应的类类型和接口函数(可在一个文件或不同文件,在此为一个文件)。
在java项目中,添加一个包:com,在包下创建两个类:JDefine.java,JTest.java,其中JDefine.java用来类类型和接口函数。JDefine.java应写为:

public class JDefine
{
   
    class clazz1
    {
        int[] a;     //对应于C++中的int *a;
        long b;
        byte c;     //对应于C++中的char c;
    };

    class clazz2
    {
        int[] a;
        clazz1 b;        
    };
    class clazz3
    {
        clazz1[] a;
        clazz2 b;
        int[] c;
        string d;
    };

    public native long func1(int a,clazz1 b);
    public native void func2(long a,clazz2 b);
    public native int func3(int[] a,clazz3 b);
};
  • 注意一:java程序想要通过jni调用C++的库,必须在函数声明时使用关键字native
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值