Salut Pierre,

On 20 February 2024 at 10:33, Pierre Lindenbaum wrote:
| (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
| 
| ```

Looks like you consistenly dropped the '-' from '-fPIC'.

FWIW the Debian (and hence Ubuntu and other derivatives) binaries contain a
libR you can embed. And littler and RInside have done so for maybe 15 years.

Cannot help with JNI but note that the history of the headless (and generally
excellent) Rserve (and its clients) started on Java. Might be worth a try.

Good luck, Dirk

| 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
| 
| ______________________________________________
| R-devel@r-project.org mailing list
| https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to