[Rd] Compiling libR as a standalone C library for java+jni (-fPIC)
Pierre Lindenbaum
||ndenb@um-p @end|ng |rom un|v-n@nte@@|r
Tue Feb 20 10:33:43 CET 2024
(cross-posted on SO: https://stackoverflow.com/questions/78022766)
Hi all,
I'm trying to compile R as a static library with the -fPIC flag so I can use it within java+JNI (is it only possible ?), but I cannot find the right flags in '.configure' to compile R this way.
I tested various flags but I cannot find the correct syntax.
for now, my latest attempt was
```
rm -rvf "TMP/R-4.3.2" TMP/tmp.tar.gz
mkdir -p TMP/R-4.3.2/lib/
wget -O TMP/tmp.tar.gz "https://pbil.univ-lyon1.fr/CRAN/src/base/R-4/R-4.3.2.tar.gz"
cd TMP && tar xfz tmp.tar.gz && rm tmp.tar.gz && cd R-4.3.2 && \
CPICFLAGS=fpic FPICFLAGS=fpic CXXPICFLAGS=fpic SHLIB_LDFLAGS=shared SHLIB_CXXLDFLAGS=shared ./configure --enable-R-static-lib --prefix=/path/to/TMP --with-x=no --disable-BLAS-shlib && make
```
witch gives the following error during configure:
```
configure: WARNING: you cannot build info or HTML versions of the R manuals
configure: WARNING: you cannot build PDF versions of the R manuals
configure: WARNING: you cannot build PDF versions of vignettes and help pages
make[1]: Entering directory 'R-4.3.2'
configure.ac:278: error: possibly undefined macro: AM_CONDITIONAL
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:870: error: possibly undefined macro: AC_DISABLE_STATIC
configure.ac:2226: error: possibly undefined macro: AM_LANGINFO_CODESET
configure.ac:2876: error: possibly undefined macro: AM_NLS
configure.ac:2880: error: possibly undefined macro: AM_GNU_GETTEXT_VERSION
configure.ac:2881: error: possibly undefined macro: AM_GNU_GETTEXT
make[1]: *** [Makefile:49: configure] Error 1
```
removing the XXXFLAGS=YYY and --prefix (?) allows R to be compiled but It's not loaded into java.
```
gcc -ITMP -I${JAVA_HOME}/include/ -I${JAVA_HOME}/include/linux \
-LTMP/R-4.3.2/lib `TMP/R-4.3.2/bin/R CMD config --cppflags` -shared -fPIC -o TMP/libRSession.so -g RSession.c TMP/R-4.3.2/lib/libR.a
/usr/bin/ld: TMP/R-4.3.2/lib/libR.a(objects.o): warning: relocation against `R_dot_Method' in read-only section `.text'
/usr/bin/ld: TMP/R-4.3.2/lib/libR.a(altrep.o): relocation R_X86_64_PC32 against symbol `R_NilValue' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
```
Any idea ? Thanks
Pierre
More information about the R-devel
mailing list