Closed HenrikBengtsson closed 1 year ago
To see the current settings, do:
$ R CMD javareconf --dry-run
Java interpreter : /usr/bin/java
Java version : 1.8.0_352
Java home path : /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre
Java compiler : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/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/amd64/server -ljvm
gcc -I"/software/c4/cbi/software/R-4.2.2-gcc10/lib64/R/include" -DNDEBUG -I/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/../include -I/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/../include/linux -I/usr/local/include -fpic -g -O2 -c conftest.c -o conftest.o
gcc -shared -L/software/c4/cbi/software/R-4.2.2-gcc10/lib64/R/lib -L/usr/local/lib64 -o conftest.so conftest.o -L/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/lib/amd64/server -ljvm -L/software/c4/cbi/software/R-4.2.2-gcc10/lib64/R/lib -lR
JAVA_HOME : /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre
Java library path: $(JAVA_HOME)/lib/amd64/server
JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/linux
JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
It would be great if we could use the shorter, more version-stable JAVA_HOME
path;
$ ls -l /usr/lib/jvm/java-1.8.0-openjdk
lrwxrwxrwx 1 root root 40 Oct 26 06:16 /usr/lib/jvm/java-1.8.0-openjdk -> /etc/alternatives/java_sdk_1.8.0_openjdk
which in turn points to (the long version-format):
$ ls -l /etc/alternatives/java_sdk_1.8.0_openjdk
lrwxrwxrwx 1 root root 60 Oct 26 06:16 /etc/alternatives/java_sdk_1.8.0_openjdk -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64
We could rely on the openjdk
module (available on Wynton and C4), which, if they exist, define the short version of JAVA_HOME
, e.g.
$ module try-load openjdk/1.8.0
$ echo "$JAVA_HOME"
/usr/lib/jvm/java-1.8.0
Oh, this is already implemented;
Deployed on C4:
$ R CMD javareconf --dry-run
Java interpreter : /usr/lib/jvm/java-1.8.0/jre/bin/java
Java version : 1.8.0_352
Java home path : /usr/lib/jvm/java-1.8.0
Java compiler : /usr/lib/jvm/java-1.8.0/bin/javac
Java headers gen.: /usr/lib/jvm/java-1.8.0/bin/javah
Java archive tool: /usr/lib/jvm/java-1.8.0/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)/jre/lib/amd64/server -ljvm
gcc -I"/software/c4/cbi/software/R-4.2.2-gcc10/lib64/R/include" -DNDEBUG -I/usr/lib/jvm/java-1.8.0/include -I/usr/lib/jvm/java-1.8.0
/include/linux -I/usr/local/include -fpic -g -O2 -c conftest.c -o conftest.o
gcc -shared -L/software/c4/cbi/software/R-4.2.2-gcc10/lib64/R/lib -L/usr/local/lib64 -o conftest.so conftest.o -L/usr/lib/jvm/java-1
.8.0/jre/lib/amd64/server -ljvm -L/software/c4/cbi/software/R-4.2.2-gcc10/lib64/R/lib -lR
JAVA_HOME : /usr/lib/jvm/java-1.8.0
Java library path: $(JAVA_HOME)/jre/lib/amd64/server
JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
JNI linker flags : -L$(JAVA_HOME)/jre/lib/amd64/server -ljvm
and just now, also on Wynton;
R CMD javareconf --dry-run
Java interpreter : /usr/lib/jvm/java-1.8.0/jre/bin/java
Java version : 1.8.0_345
Java home path : /usr/lib/jvm/java-1.8.0
Java compiler : /usr/lib/jvm/java-1.8.0/bin/javac
Java headers gen.: /usr/lib/jvm/java-1.8.0/bin/javah
Java archive tool: /usr/lib/jvm/java-1.8.0/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)/jre/lib/amd64/server -ljvm
gcc -I"/wynton/home/cbi/shared/software/CBI/R-4.2.2-gcc10/lib64/R/include" -DNDEBUG -I/usr/lib/jvm/java-1.8.0/include -I/usr/lib/jvm/java-1.8.0/include/linux -I/usr/local/include -fpic -g -O2 -c conftest.c -o conftest.o
gcc -shared -L/wynton/home/cbi/shared/software/CBI/R-4.2.2-gcc10/lib64/R/lib -L/usr/local/lib64 -o conftest.so conftest.o -L/usr/lib/jvm/java-1.8.0/jre/lib/amd64/server -ljvm -L/wynton/home/cbi/shared/software/CBI/R-4.2.2-gcc10/lib64/R/lib -lR
JAVA_HOME : /usr/lib/jvm/java-1.8.0
Java library path: $(JAVA_HOME)/jre/lib/amd64/server
JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
JNI linker flags : -L$(JAVA_HOME)/jre/lib/amd64/server -ljvm
I just noticed that R configures Java settings (
R CMD javareconf
) during themake build
step. The current Makefile then re-configures this withJAVA_HOME
set duringmake post_install
.