I am getting involved in the SciRuby project. One of the main sub-projects is called NMatrix. It is a library for linear algebra.
NMatrix uses some C/C++ and Fortran libraries. The installation instructions for Linux refer people to the installation pages for SciPy. To a certain degree, SciPy is a competitor to SciRuby. I think it is a bit ironic that they refer people to SciPy for instructions.
SciRuby requires two libraries called ATLAS and LAPACK. The SciPy instructions go over how to compile and install the libraries from source. I really do not like to do that. I prefer to use Ubuntu packages for C/C++ libraries as much as possible. I got it to work, and here are the steps I went through.
At the time of this writing (2012-07-31_22.27.46), I am using the precise version of Ubuntu.
I installed a couple of packages first: libatlas-dev and libatlas3gf-base. I ran
gem install nmatrix
and got a couple of errors:
Issue: # @echo linking shared-object nmatrix.so /usr/bin/ld: cannot find -lcblas /usr/bin/ld: cannot find -latlas collect2: ld returned 1 exit status
I did some googling, and I found out this is because it cannot find libraries called cblas and atlas. “ld” is the GNU linker. I had a few *so.* files in /usr. According to what I found out, ld wants the files to end with .so. For some reason, there are a lot of library files in Ubuntu that end with .so.1, or so.0. There are a few that end with .so.3gf.0. The “3gf” means they were made from Fortran source.
I found the library files by running the “locate” command:
/loneStar$ locate cblas /usr/lib/libgslcblas.so.0 /usr/lib/libgslcblas.so.0.0.0
So the commands that I ran were
ln -s /usr/lib/libgslcblas.so.0.0.0 /usr/lib/libcblas.so ln -s /usr/lib/atlas-base/libatlas.so.3gf.0 /usr/lib/libatlas.so
Then I ran
gem install nmatrix
and eventually I got this:
Building native extensions. This could take a while... *********************************************************** Welcome to SciRuby: Tools for Scientific Computing in Ruby! *** WARNING *** Please be aware that NMatrix is in ALPHA status. If you're thinking of using NMatrix to write mission critical code, such as for driving a car or flying a space shuttle, you may wish to choose other software (for now). NMatrix requires a C compiler, and has been tested only with GCC 4.6.1. We are happy to accept contributions which improve the portability of this project. Also required is ATLAS. Most Linux distributions and Mac versions include ATLAS, but you may wish to compile it yourself. More explicit instructions for NMatrix and SciRuby should be available on the SciRuby website, sciruby.com, or through our mailing list (which can be found on our web- site). Thanks for trying out NMatrix! Happy coding! *********************************************************** Successfully installed nmatrix-0.0.1 1 gem installed Installing ri documentation for nmatrix-0.0.1... Installing RDoc documentation for nmatrix-0.0.1...
There aren’t any more space shuttle flights. That seems like an odd warning.
After that, I installed the pry gem, and ran this command:
pry --require nmatrix
I was able to run the commands on the NMatrix wiki on Github.
Image from Madrid Skylitzes, a 12th century manuscript of Synopsis of Histories by Greek historian John Skylitzes; manuscript housed at National Library of Spain; manuscript information here. Image from World Document Library, licensed under CC BY-NC-SA 4.0.