java - JNI目录结构c和java
问题描述
我创建了 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
到 JVM 命令行来做到这一点。
(下一步,确保System.loadLibrary("myGPIOMethods")
在尝试调用任何本机方法之前调用)。
推荐阅读
- jquery - 如何使用jquery将文本存储在输入字段的变量中?
- hyperlink - Oracle Apex 将多个值传递到另一个页面
- python - 在熊猫中寻找字符串
- python - 如何更改外部链接的颜色?
- kotlin - 在 kotlin 中创建匿名类的实例
- r - 如何将每小时降雨数据数据聚合成 24 小时系列
- django - 序列化程序未将完整信息传递给 API 视图
- java - spring-boot-starter-parent 2.3.5.RELEASE 未找到
- javascript - 如果 prop 未在 react 中定义,如何重定向到另一个页面
- asp.net-core - SignalR(asp.net 核心)不发送复杂类对象