在Raspberry Pi上用C ++代码调用Java类

时间:2015-10-29 22:48:06

标签: java c++ java-native-interface raspberry-pi

我正在我的Raspberry Pi上做一个C ++程序,我想从我的C ++程序中调用一个Java类。

我的主程序是用C ++编写的,这是我的应用程序的驱动程序,但是,我试图通过我的程序与设备接口,而通信API是用Java编写的。我不想重写整个API,所以我的主要目标是从我的C ++ main调用API。

有谁知道这是怎么回事?我听说JNI是单向的,但我不确定如何在RPI上实现这一点。

1 个答案:

答案 0 :(得分:0)

可以使用JNI完成。碰巧我在GitHub上有一个项目,我一直在为Java编写C ++包装器生成器。

https://github.com/wshackle/java4cpp

即使您不想使用它,也可以使用一些代码或示例来查看。

要在linux上编译JNI程序(我认为它也适用于Rasberry PI,尽管我从未使用过Rasberry PI),我会使用以下形式的命令:

export JAVA_HOME=/usr/local/jdk1.8.0_60
g++ -I ${JAVA_HOME}/include -I ${JAVA_HOME}/include/linux -L ${JAVA_HOME}/jre/lib/i386/server/  -Wl,--rpath ${JAVA_HOME}/jre/lib/i386/server/  cpplussource.cpp -ljvm -o newprogram

我不确定Rasberry-PI使用哪个处理器。 i386可能会被其他东西取代。您的JDK可能带有客户端目录而不是服务器目录。

C ++编译器选项有更多内容:

https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/design.html#compiling_loading_and_linking_native_methods

以及有关在以下位置调用虚拟机的更多内容:

https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html#overview