使用JNA调用c/c++的so动态库函数

       最近项目收到个需求,需要调用c写的函数,给的是so文件,查阅了资料,so文件为linux下的动态库函数文件,windos下为dll文件。传统方案用JNI方式进行连接,大致看了下JNI方式实在麻烦,崩溃中找到JNA,并成功实现了调用,特此记录使用过程。

一、将so文件放在linux服务器下,并且指定export LD_LIBRARY_PATH路径为你的so文件放置路径(so文件需要前缀lib,因为jna为去动态库中匹配lib前缀的so文件,如libcompress.so

我这边放置在/etc/profile

vim /etc/profile然后设置

export LD_LIBRARY_PATH=你的so文件放置路径

编写好后执行:source /etc/profile使之生效 

二、maven导入jna包

<!-- https://mvnrepository.com/artifact/com.sun.jna/jna -->
    <dependency>
      <groupId>com.sun.jna</groupId>
      <artifactId>jna</artifactId>
      <version>3.0.9</version>
    </dependency>

三、根据c提供的头文件看需要调用的方法和其参数,在java下创建

c中格式如下:



#define uint8_t     unsigned char
#define uint16_t    unsigned short



#define COMPRESS_IR_MAX_DIF_VAL     (255) //the max different value of the ir data
#define COMPRESS_INDEX_LEN_3        (3)
#define COMPRESS_INDEX_LEN_4        (4)
#define COMPRESS_INDEX_LEN_5        (5)
#define COMPRESS_INDEX_LEN_6        (6)
#define COMPRESS_INDEX_LEN_7        (7)
#define COMPRESS_INDEX_LEN_8        (8)

#define COMPRESS_VAGUE_MAX_VALUE    	(20)//样品数据最大模糊值
#define COMPRESS_SRC_DATA_DIVIDE_VAL	(5)//原数据整除值


typedef struct
{
    uint16_t    freq;            //frequency
    int     *srcData;       //sourdata pointer
    uint16_t    srcSize;        //source data size
    uint16_t     *diffData;      //different value buffer pointer
    uint8_t     diffSize;      //different value count
    uint8_t     *indexBuf;      //index buffer pointer
    uint16_t    indexBuf
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值