> 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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.