在Linux系統下使用jdk1.8編譯項目時,遇到如下問題:
原因:
好像是 #include "jni_md.h"
會將文件包含在與jni.h
相同的目錄中,但是現在找不到了。
解決辦法
在以前的JDK版本中,jni_md.h
似乎和另一個文件都位於include / linux
文件夾中,但是include中都有指向這兩個文件的符號鏈接。
於是,先在本地系統查找jni_md.h
文件的位置,使用如下命令:
find / -name jni_md.h 2> /dev/null
在我的系統里,找到jni_md.h
的路徑為:
/usr/lib/jvm/jdk1.8.0_221/include/linux/jni_md.h
果然在include/linux
文件夾下,因此,可以僅創建如下兩個文件的符號鏈接:
$ sudo ln -s /usr/lib/jvm/jdk1.8.0_221/include/linux/jni_md.h /usr/lib/jvm/jdk1.8.0_221/include/jni_md.h
$ sudo ln -s /usr/lib/jvm/jdk1.8.0_221/include/linux/jawt_md.h /usr/lib/jvm/jdk1.8.0_221/include/jawt_md.h
最后順利解決該問題!
補充
上述問題還有一種解決辦法,可以修改項目的makefile
文件,在編譯選項中加入:
-I$(JAVA_HOME)/include/linux/
這種辦法從項目層面來解決,如果只針對項目本身,選擇該方法較好。