Jna及如何调试

Jna及如何调试

最近项目使用到了java调用c库的技术,除了传统的Jni,查资料发现Jna技术更为简便,搭建起来更为方便。便使用Jna技术进行调用c库,由于使用的c库是由自己进行编写编译的,所以其中的结构体更为简单。假如需要使用到更为复杂的结构体,则建议使用swig技术更为方便。

相关文档

在查阅资料后发现以下文章具有重要参考意义,遇到问题可以进行查阅学习:

  1. 官方文档
  2. github文档
  3. 博客:JNA教程(入门)
  4. 博客:Java调用C/C++动态库(入门)

简单使用

这 里仅做简单使用说明,其中复杂的语法请查考上面的官方文档

导入依赖
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>4.1.0</version>
</dependency>
导入编译好的c库

在本系统下编译出适配该系统的动态库,复制至java项目中具有resources性质的文件夹中,并根据以下命名方式命名文件夹:

文件夹名对应相应系统及位数
darwinmac系统
linux-x8632位linux系统
linux-x86-6464位linux系统
win32-x8632位window系统
win32-x86-6464为window系统
封装接口
import com.sun.jna.*;

public interface Clibrary extends Library {
    //假设动态库是位于linux系统下,名字为libclibrary.so
    Clibrary instance = (Clibrary) Native.loadLibrary("clibrary.so", Clibrary.class);

	//与动态库中的函数相对应,例如动态库中有函数helloworld()
    void helloworld();
}

调试

我是在ubuntu系统下进行调试,使用的是idea和clion编译器进行编写,idea进行java代码编写,clion进行c代码编写,调试需要使用到两个编译器。

步骤
  1. 首先clion中编译出的动态库是debug版本,并放置在idea相应位置

  2. 确定要调试的位置,进行打断点操作

  3. idea启动调试,但此时先不进行step over操作

  4. 在jdk目录下找到jps命令,使用jps命令查看此时所有运行的java进程,找到此时idea调试进程的pid号:

    > jps -l
    
  5. 至clion下菜单栏中,Run->Attach to Process(或ctrl+alt+F5)打开追钟进程断点,输入刚刚查看的pid号,clion进行调试状态

  6. 在idea中进行调试,若clion中含断点,则会跳转至clion进行c层面的调试

问题

若在ubuntu系统下出现:ptrace: Operation not allowed, Debugger detached错误,使用下方文档进行修改:Attach to process

> vim etc/sysctl.d/10-ptrace.conf
> 修改kernel.yama.ptrace_scope = 1 为 kernel.yama.ptrace_scope = 0
> echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值