Я не могу связать свою программу с GSL.Команда компиляции: gcc -lgsl -lgslcblas -lm -o exe t.o
.Сообщается об ошибке undefined reference to 'gsl_ran_pareto'
Но когда я проверяю символы libgsl
, gsl_ran_pareto
действительно появляется:
$nm -D /usr/lib/x86_64-linux-gnu/libgsl.so | grep gsl_ran_pareto
000000000011e980 T gsl_ran_pareto
000000000011e9d0 T gsl_ran_pareto_pdf
Я пытался связать со статической библиотекой GSL (добавление-static
) и у него та же проблема: компоновщик сообщает undefined reference
, но nm /usr/lib/x86_64-linux-gnu/libgsl.a
находит этот символ.Я также попытался скопировать библиотеку в локальную папку и связать ее напрямую - все та же проблема.
Еще немного информации (код тестовой программы tc, список символов to, пакет libgsl-dev установлен правильно).
$cat t.c
#include <gsl/gsl_math.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_rng.h>
int main(){
gsl_ran_pareto(NULL, 1, 1);
return 0;
}
$ nm t.o
U gsl_ran_pareto
0000000000000000 T main
$ dpkg -s libgsl-dev
Package: libgsl-dev
Status: install ok installed
...
ОС: Ubuntu 16.04
Есть идеи, как исследовать это дальше?Компоновщик правильно находит библиотеку (в противном случае он будет жаловаться), и библиотека содержит отсутствующий символ.Так что может пойти не так?Спасибо!