JNI 编译致命错误:jni.h: No such file or directory
Posted
技术标签:
【中文标题】JNI 编译致命错误:jni.h: No such file or directory【英文标题】:JNI compiling fatal error: jni.h: No such file or directory 【发布时间】:2017-07-24 10:34:39 【问题描述】:我正在为 i2c 传感器开发 JNI 库,但无法让我的 makefile 工作,有人可以看看吗:
CC = gcc
#CFLAGS = -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -marmv6z -Wall
CFLAGS = -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -marm -O3 -Wall -shared -I/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include -I/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include/linux
LIBS= -L'$(LD_LIBRARY_PATH)' -ljvm
LD = ld
LDFLAGS =
OBJ = Test.o raspi.o i2c.o sht21.o
BIN = libpijava.so
gpio: $(OBJ)
$(CC) $(CFLAGS) -o $(BIN) $(OBJ) $(LDFLAGS) $(LIBS)
%.o: %.c
$(CC) $(CFLAGS) -c $<
clean:
rm -rf $(BIN) $(OBJ)
我的 JNI c 文件是 Test.cpp,它依赖于 sht21.h、raspi.h 和 i2c.h
也改变了:
CC = gcc -I/usr/lib/jvm/default-java
#CFLAGS = -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -marmv6z -Wall
CFLAGS = -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -marm -O3 -Wall -shared -I/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include -I/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include/linux
LD = ld
LDFLAGS =
OBJ = Test.o raspi.o i2c.o sht21.o
BIN = libpijava.so
gpio: $(OBJ)
$(CC) $(CFLAGS) -o $(BIN) $(OBJ) $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) -c $<
clean:
rm -rf $(BIN) $(OBJ)
【问题讨论】:
【参考方案1】:您需要通过将正确的-I
标志传递给C 编译器来设置正确的包含目录。该目录非常依赖于系统。在已安装 default-jdk-headless
软件包的 Debian 系统上,添加 -I/usr/lib/jvm/default-java/include
应该可以工作。
我认为您会遇到-ljvm
的链接器故障。对于 JNI 库,您实际上不需要以这种方式链接 JVM(仅适用于生成 JVM 的应用程序)。如果你真的需要-ljvm
,事情就更复杂了。我认为没有完全可移植的路径。在我的 Debian 系统上,它是/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so
,不幸的是,甚至default-java
目录下的路径也包含amd64
引用。
【讨论】:
我也改了:posted in edit on question 还是不行 抱歉,路径输入错误。您还必须安装default-jdk-headless
软件包。
不行,它是一个树莓派我正在运行它:找不到包
java 路径很好,我可以手动编译它,但我遇到链接问题
正如我所说,对于 JNI 库,如果您只想创建 JNI 库,则实际上不必与 -ljvm
链接。以上是关于JNI 编译致命错误:jni.h: No such file or directory的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:jni_md.h:没有这样的文件或目录#include“jni_md.h”
#include <QDatetime> 导致致命错误:QDatetime: No such file or directory
MinGW GCC 致命错误 - gcc: CreateProcess: No such file or directory
安装torch7时出现致命错误:errno.h: No such file or directory
使用 rabbitmq-c 作为静态库会报错:致命错误:amqp.h: No such file or directory