我想从Java中调用一个C++方法。我了解了JNI,但我不知道如何获取所有的库文件以及应该将它们放在哪里,以便从命令行运行程序。
是否有办法在Eclipse中直接调用C++方法,因为我正在使用它来运行Java类。
我想从Java中调用一个C++方法。我了解了JNI,但我不知道如何获取所有的库文件以及应该将它们放在哪里,以便从命令行运行程序。
是否有办法在Eclipse中直接调用C++方法,因为我正在使用它来运行Java类。
我以前使用JNA处理过简单接口,它足够简单而优雅。但是建议如果有复杂的接口,则最好使用SWIG。
有一些很好的答案将SWIG与JNI和JNA进行了比较。虽然提问已经有一段时间了。
JavaCPP - https://github.com/bytedeco/javacpp
JavaCPP能够高效地在Java内部访问本地C++。在底层,它使用JNI,因此可以与所有Java SE的实现一起使用。
比JNA/JNI更容易使用。
从Java程序中调用C++代码。
按以下步骤操作
- 编写Java代码
- 包含本地方法声明
- 加载包含本地代码的共享库
- 调用本地方法
public class Sample1
{
public native int intMethod(int n);
public static void main(String[] args)
{
System.loadLibrary("Sample1");
Sample1 sample = new Sample1();
int square = sample.intMethod(5);
System.out.println("intMethod: " + square);
}
}
- 编译Java代码
javac Sample2.java
- 创建C++头文件
javac Sample2.java
- 编写C++代码
#include "Sample1.h"
#include <string.h>
JNIEXPORT jint JNICALL Java_Sample1_intMethod
(JNIEnv *env, jobject obj, jint num) {
return num * num;
}
void main(){}
- 编译C++代码
cc -G Sample1.c -o Sample1.so
- 运行Java程序
java Sample1
JNA可以代替JNI。
你只需要下载JNA jar(https://github.com/java-native-access/jna#download),并将其包含在你的java项目中。
你需要在项目属性中指定你的C++库的位置。
访问这个网站可以获得一个例子,其中还有Java和C++项目的源代码,以了解它是如何工作的。( http://blog.mwrobel.eu/how-to-call-dll-methods-from-java/#a_downloads )
http://malinsky.eu/blog/how-to-call-a-c-function-from-java/ https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html