Compiling shared dinamyc library (.dll) with R terminal in a MS-DOS command prompt window
Note: Perhaps this is a long installation procedure but it has the advantage that you are compiling C code with R, thus avoiding unnecessary build-up made by Microsoft compilers. You will get light versions of your shared dll libraries. (As an example, same C code compiled in Microsoft Visual C++ Express Edition will output a .dll file of size 54KB while this procedure outputs a 5KB dll file). Of course, once installed the procedure is straigthforward.
Installation will be from steps 1 to 7.
Future compiling will be from steps 8 to 9.
(See the troubleshoot with Windows 7 (64 bits) at the bottom)
- Locate the Rcmd.exe file. It should be in the home directory of your R installation. The path should be something like (depending on where you installed R): C:\Program Files\R\R-2.9.2\bin
- It is recommended creating shortcuts that brings you to this directory from your current R working directory. You will visit several times that location.
- Then, create a MS-DOS command prompt shortcut in your current R working directory which starts MS-DOS in the installed R (home) directory. To do that in Windows XP, go to: Start > All Programs > Accesories > right click on "Command Prompt" and choose "copy".
- Go to your R working directory and paste the shorcut. Then right click over this shortcut, choose properties and edit "Start in": "C:\Program Files\R\R-2.9.2\bin" (or other, depending on your R installation).
- Download and install the latest version of Rtools (a set of GNU public software which comprises all necessary tools to create R packages. We will only need the gcc compiler. You can find the Rtools with google or in this direction (http://www.murdoch-sutherland.com/Rtools) (Authors of this set of tools are in fact administrators of the R project.)
- During the installation you will need to specify where you installed R this time you should indicate (or other, notice it is not the same as above): C:\Program Files\R
- Almost at the end of the installation it will ask for Additional Tasks, here you have to ask for the installation procedure to modifiy your system path. It will suggest a default
modification. Accept it by clicking Next.
- (Optional Troubleshooting:) If you didn't ask for the path automatic modification, you can do it manually: Control Panel > System > Advanced > Environment variables > System variables > Path > Edit
- And add this before what is in that line (do not forget the ending with ;) :
- You will then have something like: c:\Rtools\bin;c:\Rtools\perl\bin;c:\Rtools\MinGW\bin;c:\R\bin;<WHATYOUHAVEBEFORE>
- Following the example we are using from the very first steps, use your shortcuts to move files "ar.c" and "ar.def" in the R (home) directory. Then use your command prompt shortcut to open
MS-DOS in that same location.
- (Optional) Type: Rcmd, maximize the window and read the posible options. We will use the SHLIB subcommand. Type: Rcmd SHLIB --help. You will see optional arguments for that subcommand. NOTE: to copy-paste things to this command window, you do the usual procedure, but for pasting in this command window you have to right click and choose paste.
- Type: Rcmd SHLIB ar.c and you will get two new files ar.dll and ar.o. The file with extension o is useless. Move your .c, .def and .dll where you want, but you have to remember where to be able to call the .dll file from R.
Troubleshoot with Windows 7 (64 bits):
If you get something like this:
"cannot create" tmp.def: "permission denied" make:... Error 2
- Make sure you downloaded and installed the newest version of Rtools (See the given link above. If you have an older version remove it first). Run again the command lines.
- If that did not work. Run again step 8 and 9 (i.e. run MS-DOS command prompt in the necessary directory) but make sure to run it "as administrator". You can do this by right-clicking and choosing "Run as administrator" (check again you are in the right directory, sometimes it moves). Run again the command lines.
- If that does not work. Repeat this last step but make sure you de-activate your antivirus. Run again the command lines.