Mailing List Archive


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tlug] linking gsl with atlas-sse2



Hello list, 

I am trying to compile a simple program based on gsl (Gnu Scientific
Library) example, look below for source. I also have atlas-sse2 libraries
installed on my system [1] and I want to link it with the program. 

But here is the result:

# gcc -Wall -c test.c
#

-- so far everything seem to go well

# gcc test.o -lgsl -lcblas -latlas -lm
/usr/bin/ld: cannot find -lcblas
collect2: ld returned 1 exit status
#

-- this is my problem. 

First I thougt the /etc/ld.so.conf is my friend, but:

# cat /etc/ld.so.conf
/usr/X11R6/lib
/usr/lib/atlas/sse2
/usr/lib/sse2

include /etc/ld.so.conf.d/*.conf
# 

And after that I looked if actually I have the required lib's

# ls -la /usr/lib/sse2
total 25464
drwxr-xr-x   2 root root    4096 Nov  6 15:33 .
drwxr-xr-x 103 root root   24576 Nov  6 15:39 ..
-rw-r--r--   1 root root 8572678 May 23 03:40 libatlas.a
lrwxrwxrwx   1 root root      13 Nov  6 15:33 libatlas.so -> libatlas.so.3
lrwxrwxrwx   1 root root      15 Nov  3 14:00 libatlas.so.3 -> libatlas.so.3.0
-rw-r--r--   1 root root 5805888 May 23 03:40 libatlas.so.3.0
-rw-r--r--   1 root root  302296 May 23 03:41 libcblas.a
lrwxrwxrwx   1 root root      13 Nov  6 15:33 libcblas.so -> libcblas.so.3
lrwxrwxrwx   1 root root      15 Nov  3 14:00 libcblas.so.3 -> libcblas.so.3.0
-rw-r--r--   1 root root 5208384 May 23 03:40 libcblas.so.3.0
-rw-r--r--   1 root root  352754 May 23 03:41 libf77blas.a
lrwxrwxrwx   1 root root      15 Nov  6 15:33 libf77blas.so -> libf77blas.so.3
lrwxrwxrwx   1 root root      17 Nov  3 14:00 libf77blas.so.3 -> libf77blas.so.3.0
-rw-r--r--   1 root root 5196064 May 23 03:40 libf77blas.so.3.0
-rw-r--r--   1 root root  357864 May 23 03:41 liblapack_atlas.a
lrwxrwxrwx   1 root root      20 Nov  6 15:33 liblapack_atlas.so -> liblapack_atlas.so.3
lrwxrwxrwx   1 root root      22 Nov  3 14:00 liblapack_atlas.so.3 -> liblapack_atlas.so.3.0
-rw-r--r--   1 root root  166688 May 23 03:40 liblapack_atlas.so.3.0


This I do not understand. Why the linker cannot find libcblas.so.3.0
library? 
If I compile and link the program with only gsl libraries, eg. 
# gcc -Wall -t test.c
# gcc test.o -lgsl -lgslcblas -lm

everything works well. I get a.out binary and the program runs (presumably) as
expected. 
The gslcblas library is located in /usr/lib/ 

I have tried to run ldconfig, but it did not change anything. 
ld still cannot find cblas or atlas.  

Obviously, I am missing something, but I cannot see what. 
Is there someone with better eyes? :)

[1] debian testing on IBM X40 
installed libgsl0-dev 1.8-1
          libgsl0     1.8-1
          gsl-bin     1.8-1 
          atlas3-headers  3.6.0-20.2
          atlas3-sse2-dev 3.6.0-20.2
          atlas3-sse2     3.6.0-20.2

Best regards
Michal

 ----- source test.c -----
#include <stdio.h>
#include <gsl/gsl_multifit.h>

int
main (int argc, char **argv)
{
  int i, n;
  double xi, yi, chisq;
  gsl_matrix *X, *cov;
  gsl_vector *y, *c;

  if (argc != 2)
    {
      fprintf (stderr,"usage: fit n < data\n");
      exit (-1);
    }

  n = atoi (argv[1]);

  X = gsl_matrix_alloc (n, 3);
  y = gsl_vector_alloc (n);

  c = gsl_vector_alloc (3);
  cov = gsl_matrix_alloc (3, 3);

  for (i = 0; i < n; i++)
    {
      int count = fscanf (stdin, "%lg %lg",
                          &xi, &yi);

      if (count != 2)
        {
          fprintf (stderr, "error reading file\n");
          exit (-1);
        }

      printf ("%g %g\n", xi, yi);

      gsl_matrix_set (X, i, 0, 1.0);
      gsl_matrix_set (X, i, 1, xi);
      gsl_matrix_set (X, i, 2, xi*xi);

      gsl_vector_set (y, i, yi);
    }

  {
    gsl_multifit_linear_workspace * work
      = gsl_multifit_linear_alloc (n, 3);
    gsl_multifit_linear (X, y, c, cov,
                          &chisq, work);
    gsl_multifit_linear_free (work);
  }

#define C(i) (gsl_vector_get(c,(i)))
#define COV(i,j) (gsl_matrix_get(cov,(i),(j)))

  {
    printf ("# best fit: Y = %g + %g X + %g X^2\n",
            C(0), C(1), C(2));

    printf ("# covariance matrix:\n");
    printf ("[ %+.5e, %+.5e, %+.5e  \n",
               COV(0,0), COV(0,1), COV(0,2));
    printf ("  %+.5e, %+.5e, %+.5e  \n",
               COV(1,0), COV(1,1), COV(1,2));
    printf ("  %+.5e, %+.5e, %+.5e ]\n",
               COV(2,0), COV(2,1), COV(2,2));
    printf ("# chisq = %g\n", chisq);
  }
  return 0;
}


Home | Main Index | Thread Index

Home Page Mailing List Linux and Japan TLUG Members Links