JNA简单范例

简介: JNA简单范例

C头文件

#ifndef __JNATEST_H__
#define __JNATEST_H__
#define LOG_HERE() printf("%s-%d\n", __func__, __LINE__)
void test_jna();
#endif

C代码

#include <stdio.h>
#include "jnatest.h"
void test_jna()
{
    LOG_HERE();
    printf("called from JAVA\n");
}
JAVA代码
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
public class JnaTest
{
  //继承Library,用于加载库文件  
  public interface CLibrary extends Library
    {
  CLibrary INSTANCE = (CLibrary) Native.loadLibrary(
            (Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);
  // 声明一个跟C语言的printf()一样的方法,
  void printf(String format, Object... args);
  } 
  public interface TestLibrary extends Library
    {
  TestLibrary INSTANCE = (TestLibrary) Native.loadLibrary("jnatest", TestLibrary.class);
        void test_jna();
  } 
  public static void main(String[] args)
    {
  //调用  
  CLibrary.INSTANCE.printf("From JAVA To C, year=%d\n", 2022);
        TestLibrary.INSTANCE.test_jna();
  }
}


安装依赖库

sudo apt install -y openjdk-8-jdk
sudo apt install -y libjna-java
sudo apt install -y libjna-platform-java

编译

gcc -fPIC -shared -o libjnatest.so jnatest.c
sudo ldconfig
javac -extdirs /usr/share/java JnaTest.java

测试

USJ_DIR=/usr/share/java
CLASS_DIRS=.
CLASS_DIRS=${CLASS_DIRS}:${USJ_DIR}/jna.jar
CLASS_DIRS=${CLASS_DIRS}:${USJ_DIR}/jna-platform.jar
java  \
    -cp ${CLASS_DIRS} \
    JnaTest
目录
相关文章
|
Java 测试技术 C#
【开发者笔记】java 利用jna调用c#的dll
          一、需求阐述:   如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需求。
17380 0
|
4月前
|
Java
916.【Java】javap 查看 class 文件的jdk编译版本
916.【Java】javap 查看 class 文件的jdk编译版本
137 2
|
Java
Java 目录操作demo (努力学习每一天)(一)
Java 目录操作demo (努力学习每一天)(一)
48 0
|
4月前
|
Java 编译器 API
java9新特性--jShell--命令语法改进:try语和接口的私有方法
java9新特性--jShell--命令语法改进:try语和接口的私有方法
64 0
java9新特性--jShell--命令语法改进:try语和接口的私有方法
|
Java
Java 目录操作demo (努力学习每一天)(三)
Java 目录操作demo (努力学习每一天)(三)
66 0
|
Java
Java 目录操作demo (努力学习每一天)(二)
Java 目录操作demo (努力学习每一天)(二)
65 0
|
Java
NLPIR java测试(没找到范例代码)
NLPIR java测试(没找到范例代码)
122 0
|
Java
JNA简单范例
JNA简单范例
67 0
|
Java 计算机视觉
OpenCV最简JAVA版范例
OpenCV最简JAVA版范例
134 0
|
Java 编译器
Java - 修改 Jar 包源码(非反编译操作)
Java - 修改 Jar 包源码(非反编译操作)
1858 0
Java - 修改 Jar 包源码(非反编译操作)