我创建了 3 个
JNI
类,由于我是编程新手,我只是将它们全部放在同一个文件中,但现在我必须以专业的方式为它们设置目录。
这包括源代码的
src
和类的 bin
,但我不知道将 .h
和 .so
文件放在哪里,也不知道如何编译所有内容以使其正常工作。
我已经尝试研究类路径和其他东西,但我似乎被卡住了,无法让我的代码正常运行。我也正在尝试理解和学习这方面的软件包,但我也坚持这一点。
#spaces are just for easier reading atm
cd /home/pi/git/GPIO_I2C
mkdir bin
javac -d bin /home/pi/git/GPIO_I2C/src/com/company/gpioi2c/gpio/GPIOMethods.java -h ./bin
cd bin
gcc -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux -c "com_comapny_gpioi2c_gpio_GPIOMethods.h"
cd /home/pi/git/GPIO_I2C/src/c
gcc -o libmyGPIOMethods.so -shared -fPIC -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux GPIOMethods.c -lc
sudo cp libmyGPIOMethods.so /usr/lib
cd /home/pi/git/GPIO_I2C/
java -cp /home/pi/git/GPIO_I2C/bin/com/company/gpioi2c/gpio GPIOMethods
这是我迄今为止尝试编译的方法之一,但我得到了
Could not load main class
或unsatisfied link error
,具体取决于我所做的更改?
如果您已经成功生成了 .so 文件,您需要做的就是告诉 JVM 在哪里可以找到它。您可以通过将
-Djava.library.path=/directory/path/goes/here
(下一步,请确保在尝试调用任何本机方法之前调用
System.loadLibrary("myGPIOMethods")
)。
看看这里:http://jnicookbook.owsiak.org/recipe-No-021/
您也可以在这里查看:http://jnicookbook.owsiak.org/recipe-No-021/
基本上,您想要的是一种结构,其中所有标头和 C 代码都位于一个位置,而 Java 代码位于另一个位置。 基本上,您可以从简单的事情开始:
.
|-- Makefile
|-- c
| |-- recipeNo021_AnotherFunction.c
| `-- recipeNo021_HelloWorld.c
|-- java
| `-- recipeNo021
| `-- HelloWorld.java
|-- lib
`-- target
当谈到简单的 JNI 代码时,从超级简单的开始:
Hello world!
https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo001