在 Linux(CentOS 7.9)下,Java 可以通过 JNI(Java Native Interface) 或 JNA(Java Native Access) 调用 C++ 方法。
JDK 1.8 适用于这两种方式,但 JNI 更适合高性能需求,JNA 则更易用。
使用 JNA(Java Native Access)
适用于:简单封装、无需手写 JNI 代码JNA 让 Java 直接调用 C++ 共享库,无需编写 JNI 代码。
#include <iostream>
extern "C" {
int add(int a, int b) {
return a + b;
}
}
编译:在linux环境下运行,win可以在WSL下
g++ -shared -fPIC -o libmycpp.so mycpp.cpp
java部分
在 Java 中使用 JNA
添加 jna.jar(可以从 JNA 官网 下载)。
import com.sun.jna.Library;
import com.sun.jna.Native;
public class JNATest {
public interface MyLib extends Library {
MyLib INSTANCE = (MyLib) Native.load("mycpp", MyLib.class);
int add(int a, int b);
}
public static void main(String[] args) {
int result = MyLib.INSTANCE.add(3, 5);
System.out.println("Result from C++: " + result);
}
}
pom文件中可以加入
<dependencies>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.2.2</version>
</dependency>
</dependencies>
注:
JNA 4.2.2(较稳定,兼容 JDK 8,性能较好)
JNA 4.5.2(更接近最新版本,同时仍然兼容 JDK 8)
JNA 4.1.0+(最低兼容 JDK 8 的版本)
javac -cp .:jna-4.2.2.jar -d . JNATest.java
java -cp .:jna-4.2.2.jar JNATest
注意都要在同一个目录下。
下载JNA 4.2.2:
下载链接: https://repo1.maven.org/maven2/net/java/dev/jna/jna/4.2.2/jna-4.2.2.jar