JNI目录结构c和java

问题描述 投票:0回答:2

我创建了 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
java c class java-native-interface directory-structure
2个回答
0
投票

(下一步,请确保在尝试调用任何本机方法之前调用

System.loadLibrary("myGPIOMethods")
)。

看看这里:

http://jnicookbook.owsiak.org/recipe-No-021/

0
投票

您也可以在这里查看: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

© www.soinside.com 2019 - 2024. All rights reserved.