Я написал код 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 не была правильно связана. У кого-нибудь есть предложения? Я действительно ценю!