Tuesday, December 7, 2010

Build RQuantLib on 32-bit Windows


Before you start, note that there is now a Windows binary of RQuantLib is available on CRAN.



Due to a change in how R-2.12.0 is built, CRAN maintainers could no longer provide a Windows binary of RQuantLib with the QuantLib library they had been using. I decided to try and build an updated QuantLib library from source, which would allow me (and them) to build the current RQuantLib.
Instructions for Getting Started with QuantLib and MinGW from Scratch by Terry August (found in QuantLib FAQ 3.2) were incredibly valuable.  Thanks to Dirk Eddelbuettel for helpful guidance and pointers while I was working through this exercise, and for useful comments on this blog post.

Here are the steps I took.  You will need to modify the paths to suit your particular setup.
  1. Download and install Rtools.
  2. Download and install MinGW.
  3. Download boost (I used boost_1_42_0.tar.gz)
    unzip to c:/R/cpp/boost_1_42_0
    We only need the headers, so there's nothing to install.
  4. Download QuantLib (I used QuantLib-1.0.1.zip)
    unzip to c:/R/cpp/QuantLib-1.0.1
  5. Install Quantlib. The make and make install commands are going to take quite some time. I think they took about 2 hours on my 3.4Ghz system. Let's get started. Open a msys command line and run:
    set PATH=c:/MinGW/bin:$PATH
    cd c:/R/cpp
    mkdir lib include
    cd QuantLib-1.0.1
    configure --with-boost-include=c:/R/cpp/boost_1_42_0 --prefix=c:/R/cpp
    make
    make install
    cd c:/R/cpp/lib
    cp libQuantLib.a libQuantLib.a.bak
    strip --strip-unneeded libQuantLib.a
  6. Download the RQuantlib source (I used RQuantLib_0.3.4.tar.gz)
    unzip it to c:/R/cpp/RQuantLib
  7. Open c:/R/cpp/RQuantLib/src/Makevars.win and ensure
    PKG_LIBS=$(RCPP_LDFLAGS) -L$(QUANTLIB_ROOT)/lib -lQuantLib
  8. Make the following directories:
    c:/R/cpp/QuantLibBuild/boost
    c:/R/cpp/QuantLibBuild/ql
    c:/R/cpp/QuantLibBuild/lib
    then copy:
    c:/R/cpp/boost_1_42_0/boost to c:/R/cpp/QuantLibBuild/boost
    c:/R/cpp/include/ql to c:/R/cpp/QuantLibBuild/ql
    c:/R/cpp/lib/libQuantLib.a to c:/R/cpp/QuantLibBuild/lib/libQuantLib.a
  9. Now you should be able to build RQuantLib via:
    set QUANTLIB_ROOT=c:/R/cpp/QuantLibBuild
    R CMD INSTALL RQuantLib_0.3.4.tar.gz
I cannot guarantee these instructions will work on a 64-bit system because I do not have access to a 64-bit Windows machine, but the steps should be fairly similar.  If you run into any issues, feel free to leave a comment and I will do my best to help.

If you just want to use my build, you can install this RQuantLib_0.3.4 Windows binary.

12 comments:

jon said...

Hi Thanks for posting your guidelines, I have tried it on a 64bit machine, it seems to be working upto step 11. I'm not sure where I am supposed to be entering these last commands. I entered "set QUANTLIB_ROOT=c:/R/cpp/QuantLibBuild" via a dos prompt and created the environment varable QUANTLIB_ROOT. The last command "R CMD INSTALL RQuantLib_0.3.4.tar.gz" doesn't seem to be recognised anywhere. I have tried to enter it into the R commnad line only to be told there is an unexpected symbol. Obviously I am doing something wrong? ANy ideas.

Thanks



11.Now you should be able to build RQuantLib via
set QUANTLIB_ROOT=c:/R/cpp/QuantLibBuild
R CMD INSTALL RQuantLib_0.3.4.tar.gz

Joshua Ulrich said...

Hi Jon,

It sounds like your PATH variable doesn't include the locations for Rtools as specified in The Windows Toolset section of the R Installation and Administration manual. Is that the issue?

jon said...

Hi - I tried building it again with the path of Rtools set correctly, the problem I am getting is with the utils package I think.

>R CMD INSTALL RQuantLib_0.3.6.tar.gz
Error: unexpected symbol in "R CMD"

although I've tried loading the utils package several times it doesn't seem to recognize the command?

Joshua Ulrich said...

"R CMD" is a command line function, not an R function. Try running it from a command prompt.

Bogaso said...

Hi Joshua, you instruction number 5 is not working in my vista machine. I have written:

"configure --with-boost-include=c:/R/cpp/boost_1_42_0 --prefix=c:/R/cpp"

However I am getting error as "'configure' is not recognized as an internal or external command, operable program or batch file". Would you please tell me what to do with this error?

Joshua Ulrich said...

Bogaso, it looks like you tried to run that from a Windows command line instead of the msys command line.

Tomorrow I will try to build a Windows binary and provide a link to it in the original post.

س said...

I did try your instructions step-by-step but when I install the package using (R CMD INSTALL) I get the following message at the end of compilation process:

"This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
ERROR
Installation failed"

Any suggestion?

Joshua Ulrich said...

What do you get when you run R CMD check?

س said...

Hi,
This is an excerpt from 00intstall.out produce via R CMD check.

installing to d:/RQuantLib.Rcheck/RQuantLib/libs/i386
** R
** demo
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices ...
** testing if installed package can be loaded

* DONE (RQuantLib)

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

س said...

After going through all the steps you've provided, the package was installed (although as I mentioned there are some error at the end). It seems there is a conflict between the package and Microsoft Visual C++ Runtime library.I loaded the package into R, but upon closing the R session a message pops up, complaining about a run time error. The message is:
Run Time Error!
Program: Rgui.exe
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Joshua Ulrich said...

I doubt this could be caused by a conflict with Microsoft Visual C++ Runtime library because none of the components are built with Visual C++ (R cannot be built with it and you shouldn't have built QuantLib with it).

I can only guess what the issue is without knowing more about your setup. What version of Windows, R, Rtools, MinGW, msys, boost, QuantLib, and RQuantLib are you using?

Do you have any other software installed that may be causing conflicts (e.g. Cygwin)?

Can you just use the 32-bit binary I posted? If not, I'm working with some of the R core members to make a multi-architecture Windows binary available on CRAN, which should be available soon.

س said...

Joshua,
Thanks for the help. I'm now using the binary package that you've posted, and waiting for the newer versions to become available on CRAN.
Thanks again