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

clion编译jni,找不到jni.h的解决办法

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