Скомпилируйте c коды при связывании с библиотекой gsl с помощью R CMD SHLIB - PullRequest
3 голосов
/ 11 января 2020

Я написал код R, который взаимодействует с кодом c. Код c ссылается на библиотеку GNU Scientifi c (GSL). У меня нет проблем с компиляцией и выполнением кодов на моей Ma c. Поэтому сами коды не должны иметь проблем. Однако когда я отправляю коды на сервер Linux, я не могу скомпилировать. На сервере я нахожу путь к библиотеке gsl:

[user@server]$ gsl-config --libs
-lgsl -lgslcblas -lm
[user@server]$ gsl-config --cflags
-I/usr/include

Я попытался выполнить следующие команды в терминале для компиляции c.

R CMD SHLIB example.c -lgsl -lgslcblas -lm
PKG_LIBS="-lgsl -lgslcblas -lm" R CMD SHLIB example.c
PKG_LIBS="-lgsl -lgslcblas -lm" PKG_CPPFLAGS="-I/usr/include" R CMD SHLIB example.c

Они все выдают мне следующее предупреждение , Но я получаю файлы .o и .so.

gcc -m64 -std=gnu99 -I"/usr/include/R" -DNDEBUG   -I/usr/local/include  -fpic  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic  -c example.c -o example.o
example.c: In function ‘GXE_mcmc’:
example.c:571:3: warning: "/*" within comment [-Wcomment]
   /*printf("The updated value of a is %lf\n",*a);
 ^
example.c:591:3: warning: "/*" within comment [-Wcomment]
   /* printf("Updated freq.out is as below\n");
 ^
example.c: In function ‘GXE_update_randomA’:
example.c:1528:4: warning: implicit declaration of function ‘gsl_ran_multivariate_gaussian’ [-Wimplicit-function-declaration]
    gsl_ran_multivariate_gaussian(r,mean_vec,mnorm_cov_mat,randomA_result);
    ^
gcc -m64 -std=gnu99 -shared -L/usr/lib64/R/lib -Wl,-z,relro -o example.so example.o -lgsl -lgslcblas -lm -L/usr/lib64/R/lib -lR

Когда я пытаюсь 'dyn.load (example.so)', у меня появляется следующая ошибка.

Error in dyn.load("example.so") : 
  unable to load shared object '/home/user/01_07/example.so':
  /home/user/01_07/example.so: undefined symbol: gsl_ran_multivariate_gaussian

Кажется, библиотека gsl не была правильно связана. У кого-нибудь есть предложения? Я действительно ценю!

...