JNA简单范例

简介: JNA简单范例
  • C头文件
1. #ifndef __JNATEST_H__
2. #define __JNATEST_H__
3. 
4. #define LOG_HERE() printf("%s-%d\n", __func__, __LINE__)
5. 
6. void test_jna();
7. 
8. #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
|
Java
Java 目录操作demo (努力学习每一天)(一)
Java 目录操作demo (努力学习每一天)(一)
49 0
|
Java
Java 目录操作demo (努力学习每一天)(二)
Java 目录操作demo (努力学习每一天)(二)
66 0
|
Java
Java 目录操作demo (努力学习每一天)(三)
Java 目录操作demo (努力学习每一天)(三)
66 0
JNA简单范例
JNA简单范例
81 0
|
Java
NLPIR java测试(没找到范例代码)
NLPIR java测试(没找到范例代码)
122 0
|
Java 计算机视觉
OpenCV最简JAVA版范例
OpenCV最简JAVA版范例
134 0
|
Java Linux Android开发
|
Java Linux C语言
linux下java 调用 c jni 实现 HelloWorld
1)首先写HelloWorld的java类 class HelloWorld { static { System.loadLibrary("HelloWorld"); } private native void print(); public static void main(String[] ar
982 0
java高级用法之:JNA中的Structure
前面我们讲到了JNA中JAVA代码和native代码的映射,虽然可以通过TypeMapper来将JAVA中的类型和native中的类型进行映射,但是native中的数据类型都是基础类型,如果native中的数据类型是复杂的struct类型该如何进行映射呢? 不用怕,JNA提供了Structure类,来帮助我们进行这些映射处理。