2017-07-24 57 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

沒有辦法,它的一個樹莓派我運行它:包沒有找到 –

相關問題