简体   繁体   中英

Build R package with C Code for Linux and Windows

I have been doing research and I can't quite figure out how to build my R package, that calls C functions, in order for it to work in both Windows and Linux environments. I am building the package on a Linux machine.

I have two C files, one.C and two.C, I place the two files in the src directory after using package.skeleton(...). In the namespace file I use the command: useDynLib(one,two). Is this correct? Or do I need to put the actual function names instead of the file names? Do I need to export the function names?

Do I need to put the .so files in the src directory or will these be created automatically? I am worried then it won't work on a windows machine which needs a .dll file.

As you can see I'm a little confused, thanks for the help.

One of the standard R manuals is Writing R Extensions . Part of this manual is the section 5 System and foreign language interfaces . This will probably answer the majority of your questions. In regard to the dynamically linked libraries ( dll or so ), they are built on the fly. You develop your package, including the C code. Once you want to install the library from source (eg using R CMD INSTALL spam ), or create a binary distribution, the C code will be compiled into the appropriate library file.

Faced with similar headaches I switched to C++ in combination with Rcpp. Rcpp takes care of all the headaches for you in compiling packages:

http://dirk.eddelbuettel.com/code/rcpp.html

There is also an entire vignette on how to build a package using Rcpp:

http://dirk.eddelbuettel.com/code/rcpp/Rcpp-package.pdf

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM