Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ JNI编译致命错误:JNI.h:没有这样的文件或目录_C++_Gcc_Makefile_Java Native Interface_G++ - Fatal编程技术网

C++ JNI编译致命错误:JNI.h:没有这样的文件或目录

C++ JNI编译致命错误:JNI.h:没有这样的文件或目录,c++,gcc,makefile,java-native-interface,g++,C++,Gcc,Makefile,Java Native Interface,G++,我正在为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/

我正在为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)
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=测试o raspi.o i2c.o sht21.o
BIN=libpijava.so
gpio:$(OBJ)
$(CC)$(CFLAGS)-o$(BIN)$(OBJ)$(LDFLAGS)$(LIBS)
%.o:%.c
$(CC)$(CFLAGS)-c$<
清洁:
rm-rf$(BIN)$(OBJ)
我的JNIC文件是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)
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=测试o raspi.o i2c.o sht21.o
BIN=libpijava.so
gpio:$(OBJ)
$(CC)$(CFLAGS)-o$(BIN)$(OBJ)$(LDFLAGS)
%.o:%.c
$(CC)$(CFLAGS)-c$<
清洁:
rm-rf$(BIN)$(OBJ)

您需要通过向C编译器传递right
-I
标志来设置正确的include目录。该目录非常依赖于系统。在Debian系统上,安装了
default jdk headless
包,添加
-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
,甚至
默认java
目录下的路径也包含
amd64
引用,不幸的是。

我也更改了它:发布在“编辑问题”中,但它仍然不起作用。您还必须安装
默认jdk headless
包。不行,我正在运行它:包没有找到java路径很好,但我可以手动编译它,但我得到了链接问题正如我所说的,对于JNI库,如果您只想创建JNI库,实际上不需要链接
-ljvm