Установка R пакета rgdal завершается неудачно, общий объект отсутствует - PullRequest
1 голос
/ 25 февраля 2020

Я установил R-3.6.1 на 64-битном slackware v14.2-current. Я пытаюсь установить библиотеку R, rgdal. Я пробовал установку изнутри R с install.packages("rgdal")

и

Установка завершается с ошибкой:

...
** testing if installed package can be loaded from temporary location
Error: package or namespace load failed for ‘rgdal’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/home/user/R/x86_64-slackware-linux-gnu-library/3.6/00LOCK-rgdal/00new/rgdal/libs/rgdal.so':
libgdal.so.20: cannot open shared object file: No such file or directory
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/home/user/R/x86_64-slackware-linux-gnu-library/3.6/rgdal’

Моя установка GDAL:

bash-5.0$ gdalinfo --version
GDAL 2.4.4, released 2020/01/08

Поиск libgdal:

bash-5.0$ locate libgdal.so
/usr/local/lib/libgdal.so
/usr/local/lib/libgdal.so.26
/usr/local/lib/libgdal.so.26.0.1

Я пытался

install.packages('rgdal', type = "source", configure.args=c('--with-libgdal=/usr/local/lib/libgdal.so.26'))

, не зная, что произойдет. Сбой с тем же сообщением об ошибке, что и выше.

> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-slackware-linux-gnu (64-bit)
Running under: Slackware 14.2 x86_64 (post 14.2 -current)

Matrix products: default
BLAS:   /usr/lib64/R/lib/libRblas.so
LAPACK: /usr/lib64/R/lib/libRlapack.so

locale:
[1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
[3] LC_TIME=en_US.UTF-8        LC_COLLATE=C              
[5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
[7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
[9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.6.1 tools_3.6.1    tcltk_3.6.1   

R / rgdal ищет libgdal.so.20, и у меня есть .26, но нет .20. Я не знаю, как и если нужно, указать функцию install.packages() на v.26. Будет ли это работать, если сценарий указывает на .26? Как заставить скрипт указать на более новую версию libgdal.so?

РЕДАКТИРОВАТЬ - После комментария от Романа Луштрика я скопировал

cp /usr/local/lib/libgdal.so.26 /usr/lib64/
cp /usr/local/lib/libgdal.so /usr/lib64/

Затем попробовал install.packages("rgdal") еще раз. Сбой снова с сообщением об ошибке, аналогичным первому, за исключением того, что теперь отсутствует «libproj.so.15». Таким образом, повторяем шаги:

cp /usr/local/lib/libproj.so /usr/lib64
cp /usr/local/lib/libproj.so.15 /usr/lib64

Пробуем install.packages("rgdal") снова. На этот раз ошибка была

Error: proj/epsg not found
Either install missing proj support files, for example
the proj-nad and proj-epsg RPMs on systems using RPMs,
or if installed but not autodetected, set PROJ_LIB to the
correct path, and if need be use the --with-proj-share=
configure argument.

bash-5.0# export PROJ_LIB=/usr/share/proj
bash-5.0# echo $PROJ_LIB
/usr/share/proj

Попробуйте install.packages("rgdal") еще раз. Теперь ошибка:

Error: package or namespace load failed for ‘rgdal’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/home/user/R/x86_64-slackware-linux-gnu-library/3.6/00LOCK-rgdal/00new/rgdal/libs/rgdal.so':
/home/user/R/x86_64-slackware-linux-gnu-library/3.6/00LOCK-rgdal/00new/rgdal/libs/rgdal.so: 
undefined symbol: pj_get_ellps_ref
...