Christophe Bousquet
2023-Aug-31 11:57 UTC
[R] Problems with installing R packages from source and running C++ in R, even on fresh R installation
> When installing packages containing code to compile, R eventually calls > R CMD SHLIB. Same thing happens with inline C++: it gets stored in a > temporary file, compiled into a *.dll using R CMD SHLIB and then loaded > using dyn.load(). > > Write the following into a file named hello.c: > > #include <R.h> > #include <Rinternals.h> > SEXP hello(void) { > SEXP ret = PROTECT(allocVector(STRSXP, 1)); > SET_STRING_ELT(ret, 0, mkChar("hello")); > UNPROTECT(1); > return ret; > } > > From within R, setwd() to the directory containing hello.c and run: > > tools::Rcmd('SHLIB -n hello.c') > tools::Rcmd('SHLIB hello.c') > > What do the commands print? Does the second command fail?I basically get no output from the two commands, apart from a new blank R prompt. The same is true when I run the commands from within R with reference to the other hello.c you asked me to create previously: #include <stdio.h> int main(void) { printf("Hello world!\n"); } However, I can still make this old hello.c print its message using Rtools43 bash with your previous code: export PATH=/x86_64-w64-mingw32.static.posix/bin:$PATH gcc -o hello.exe hello.c ./hello.exe But, if I try to apply this code to the new hello.c file, I get the following error:hello.c:1:10: fatal error: R.h: No such file or directory 1 | #include <R.h> | ^~~~~ compilation terminated. I also continued some potential diagnostics with the pkgbuild package. Here is the output: ```> library(pkgbuild) > rtools_path()[1] "C:\\rtools43/usr/bin"> has_rtools(debug = TRUE)Found in Rtools 4.3 installation folder [1] TRUE> check_rtools(debug = TRUE)Found in Rtools 4.3 installation folder [1] TRUE> has_compiler(debug = TRUE)Trying to compile a simple C file Running "C:/PROGRA~1/R/R-43~1.1/bin/x64/Rcmd.exe" SHLIB foo.c [1] FALSE> check_compiler(debug = TRUE)Trying to compile a simple C file Running "C:/PROGRA~1/R/R-43~1.1/bin/x64/Rcmd.exe" SHLIB foo.c Error: Failed to compile C code> rcmd_build_tools()Error in paste0("R CMD ", ..1) : the ... list contains fewer than 1 element In addition: Warning messages: 1: In is_string(left) : restarting interrupted promise evaluation 2: In is_string(left) : restarting interrupted promise evaluation ``` However, I am not sure how this is relevant for the issue at hand... Concerning the other answers, I am not sure how this could be related to RStudio: I test everything only using R without RStudio to avoid this extra layer of potential dependencies (but it also does not work if I try within RStudio anyway). I am also not sure how this could be related to the paths: on my personal laptop (on which everything works fine), the only paths related to R are RTOOLS43_HOME (C:/rtools43) and RTOOLS42_HOME (C:/rtools42). The same paths that are currently set on my work laptop. It was not working neither when I tried to add other paths related to R on my work laptop.
Ivan Krylov
2023-Aug-31 12:34 UTC
[R] Problems with installing R packages from source and running C++ in R, even on fresh R installation
? Thu, 31 Aug 2023 11:57:06 +0000 Christophe Bousquet <chr_bousquet at protonmail.com> ?????:> > tools::Rcmd('SHLIB -n hello.c') > > tools::Rcmd('SHLIB hello.c') > > > > What do the commands print? Does the second command fail? > > I basically get no output from the two commands, apart from a new > blank R prompt.So starting a new Rcmd.exe process fails for some reason. If you take the same R session where the environment variables are right and Sys.which() resolves Make and GCC and try to run tools:::.shlib_internal(c('-n', 'hello.c')) or tools:::.shlib_internal('hello.c'), does it do something useful? (I'm still debugging from first principles. Duncan Murdoch is likely right that adding the environment variables, either RTOOLS43_HOME=c:/rtools43 or adjusting PATH as described above, could help.) -- Best regards, Ivan
Reasonably Related Threads
- Problems with installing R packages from source and running C++ in R, even on fresh R installation
- Problems with installing R packages from source and running C++ in R, even on fresh R installation
- Problems with installing R packages from source and running C++ in R, even on fresh R installation
- Problems with installing R packages from source and running C++ in R, even on fresh R installation
- path to rtools not updated in R 4.2.3 - line 1: gcc: command not found