[R] Problems with installing R packages from source and running C++ in R, even on fresh R installation

Christophe Bousquet chr_bou@quet @end|ng |rom protonm@||@com
Thu Aug 31 13:57:06 CEST 2023


> 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.



More information about the R-help mailing list