报错信息
checking whether JNI programs can be compiled... configure: error: Cannot compile a simple JNI program. See config.log for details. Make sure you have Java Development Kit installed and correctly registered in R. using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0’ gcc -I"/usr/share/R/include" -DNDEBUG -fpic -g -O2 -ffile-prefix-map=/build/r-base-qoPWdk/r-base-4.3.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -c conftest.c -o conftest.o conftest.c:1:10: fatal error: jni.h: No such file or directory 1 | #include <jni.h> | ^~~~~~~ compilation terminated. make: *** [/usr/lib/R/etc/Makeconf:191: conftest.o] Error 1 Unable to compile a JNI program
解决方案
首先重新安装jdk,例如Java11的jdk以Ubuntu/Debian为例是`openjdk-11-jdk`:
sudo apt-get install openjdk-11-jdk -y
然后重新配置R的Java环境:
R CMD javareconf
问题解决
root@Rstudio:~# R CMD javareconf Java interpreter : /usr/lib/jvm/default-java/bin/java Java version : 11.0.19 Java home path : /usr/lib/jvm/default-java Java compiler : /usr/lib/jvm/default-java/bin/javac Java headers gen.: Java archive tool: /usr/lib/jvm/default-java/bin/jar trying to compile and link a JNI program detected JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0’ gcc -I"/usr/share/R/include" -DNDEBUG -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux -fpic -g -O2 -ffile-prefix-map=/build/r-base-qoPWdk/r-base-4.3.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -c conftest.c -o conftest.o gcc -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -o conftest.so conftest.o -L/usr/lib/jvm/default-java/lib/server -ljvm -L/usr/lib/R/lib -lR JAVA_HOME : /usr/lib/jvm/default-java Java library path: $(JAVA_HOME)/lib/server JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm Updating Java configuration in /usr/lib/R Done.