2017-07-24 58 views
1

我工作的一个JNI LIB的I2C传感器,我不能让我的makefile工作,可有人请看看:JNI编译致命错误:jni.h:没有这样的文件或目录

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) 

回答

0

您需要设置正确的include目录通过将右侧-I标志传递给C编译器。该目录是非常系统相关的。在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,甚至在default-java目录下的路径包含一个amd64引用,遗憾的是。

+0

我也改变了它: *发布在编辑问题* 而且它仍然不起作用 –

+0

对不起,错误的路径。你还必须安装'default-jdk-headless'软件包。 –

+0

没有办法,它的一个树莓派我运行它:包没有找到 –

相关问题