Como posso executar um programa c / c ++ que use a Biblioteca Científica GNU (GSL)?

3

Estou tentando executar 2 exemplos simples em c / c ++ usando a biblioteca científica GNU .

Esses são os códigos:

1º: Um exemplo de programa

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

int main (void)
{
  double x = 5.0;
  double y = gsl_sf_bessel_J0 (x);
  printf ("J0(%g) = %.18e\n", x, y);
  return 0;
}

2º: Programas de exemplo para matrizes

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

int main (void)
{
  int i, j; 
  gsl_matrix * m = gsl_matrix_alloc (10, 3);

  for (i = 0; i < 10; i++)
    for (j = 0; j < 3; j++)
      gsl_matrix_set (m, i, j, 0.23 + 100*i + j);

  for (i = 0; i < 100; i++)  /* OUT OF RANGE ERROR */
    for (j = 0; j < 3; j++)
      printf ("m(%d,%d) = %g\n", i, j, 
              gsl_matrix_get (m, i, j));

  gsl_matrix_free (m);

  return 0;
}

Eu vi no Centro de Software que eu tenho o GNU Biblioteca Científica (GSL) - pacote de bibliotecas (libgsl0ldbl 1.16 + dfsg-1ubuntu1) mas a documentação que li dizia que precisava compilar com o próximo código:

$ gcc -Wall -I/usr/local/include -c example.c

E o diretório /usr/local/include estava vazio, então eu também instalei manualmente a partir do site GSL principal - site da Biblioteca Científica GNU a nova versão GSL2.1 . Em seguida eu corro o código antes mencionado então eu tive um novo arquivo example.o então eu corro o próximo código:

$ gcc -L/usr/local/lib example.o -lgsl -lgslcblas -lm

Então, eu tinha um arquivo a.out , tentei executar $ ./a.out , mas a saída foi:

'./a.out: error while loading shared libraries: libgsl.so.19: cannot open shared object file: No such file or directory'

Eu também tentei este comando:

$ ldconfig -p | grep gsl
    libgslcblas.so.0 (libc6,x86-64) => /usr/lib/libgslcblas.so.0
    libgsl.so.0 (libc6,x86-64) => /usr/lib/libgsl.so.0

Então eu posso ver que a execução de a.out estava pedindo libgsl.so.19 , mas o ldconfig disse que a biblioteca no pc é libgsl.so.19

    
por Adolfo Correa 01.05.2016 / 22:46

2 respostas

0

você pode definir o caminho da biblioteca e exportá-lo, esta é uma maneira suja, mas funciona

  1. LD_LIBRARY_PATH = $ LD_LIBRARY_PATH: / data2 / Irfan / gsl / lib
  2. exportar LD_LIBRARY_PATH

nota * / data2 / Irfan / gsl / lib é um caminho de onde você instalou o gsl

    
por Irfan 11.04.2018 / 09:47
0

Acho que seu problema pode ter sido resolvido agora. Essa resposta fornecerá uma referência fácil para qualquer pessoa que tenha enfrentado um problema semelhante.

Além da solução da Irfan, que é uma solução perfeitamente válida. Outra opção é vincular a biblioteca estática no momento da vinculação.

gcc -L/usr/local/lib example.o -l:libgsl.a -lgslcblas -lm

    
por 26.10.2018 / 08:53