Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to CORRECTLY install gsl library in Linux?

I got a problem while installing the GNU Scientific Library (gsl). I put the package on my desktop, and did "./configure", "make", and "sudo make install", according to the document included. I checked the /usr/local/include directory, there is a newly created "gsl" folder in there. But When I tried to use the functions provided by the library, the "undefined reference to 'gsl_sf_beta_inc'" error occurred. Here is my code.

#include <stdio.h>
#include <gsl/gsl_sf_gamma.h>

int main (void)
{
    double a = 20;
    double b = 1000;
    double x = 0.5;
    double result = gsl_sf_beta_inc(a, b, x);
    printf("%f/d", result);
    return 0;
}

I sensed that the problem might be caused by the fact I put the package on the desktop, so the binary code generated by the "make" command goes there, which is wrong. So, is my guess correct? If it is, where should I put them? If it is not, what should I do? Thanks.

like image 650
seemuch Avatar asked Aug 11 '11 22:08

seemuch


2 Answers

You need to link the library, assuming the make install was successful.

The gsl's documentation says this should work
(note the two necessary linking options for gsl to work: "-lgsl -lgslcblas"):

gcc -I/usr/local/include -L/usr/local/lib main.c -o main -lgsl -lgslcblas -lm

Alternative "cblas" instead of gsl's cblas is also possible as per: alternate cblas for gsl

like image 177
Vinicius Kamakura Avatar answered Sep 27 '22 21:09

Vinicius Kamakura


Use pkg-config --libs gsl to find out what the necessary linkers are to be and then just link them. An optional thing would be to check pkg-config --cflags gsl. The second gives you the directory of the include files if they are not installed in the default /usr/include/ directory. If you've installed it there you can just ignore that.
The output of pkg-config --libs gsl would be
-lgsl -lgslcblas -lm
That means that those three have to be linked. So while compiling your program you do that by,
gcc name.c -lgsl -lgslcblas -lm

like image 21
Nidish Narayanaa Avatar answered Sep 27 '22 21:09

Nidish Narayanaa