Я продолжаю получать следующую ошибку при попытке установить readxl
или haven
в R (обе зависимости от tidyverse
) после компиляции, когда установщик запускает нагрузочный тест:
** testing if installed package can be loaded
Error in dyn.load(file, DLLpath = DLLpath, ...) :
unable to load shared object '<my_lib_Path>/readxl/libs/readxl.so':
<my_lib_path>/readxl/libs/readxl.so: undefined symbol: libiconv
Error loading failed
У меня есть libiconv.so
в пути к локальной библиотеке (не для пакетов R), который включен в LD_LIBRARY_PATH
, и я проверил в своем сеансе R, что Sys.getenv("LD_LIBRARY_PATH")
имеет этот каталог. Почему загрузчик динамической библиотеки R не может найти этот общий объект? Есть ли другая специфичная для R переменная среды, которую мне нужно определить, чтобы загрузчик динамической библиотеки в R выполнял поиск по моему локальному пути к библиотеке?
Обратите внимание, что это не проблема с путем к библиотеке R, а проблема не-R-зависимости, которая есть у пакета R. Если бы я компилировал и связывал код C++, gcc
использовал бы ld
и, следовательно, LD_LIBRARY_PATH
для отслеживания динамических зависимостей. Похоже, что R не соблюдает этот довольно распространенный подход, и я не могу найти никакой документации о том, как управлять этими более мелкими проблемами зависимостей.
дополнительные детали
!> sessionInfo()
R version 3.3.3 (2017-03-06)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[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
>
Ранее я скомпилировал libiconv
, потому что это была зависимость для чего-то другого (сейчас не помню, что — скорее всего, это не пакет R, учитывая текущие проблемы). Я попытался переустановить его, но ничего не изменилось.
Редактировать
Я также пытался вручную загрузить библиотеку перед установкой:
> dyn.load(".local/lib/libiconv.so")
> is.loaded("libiconv")
[1] TRUE
> install.packages("tidyverse")
но это не так, как указано выше.
readxl
илиhaven
из папки/library/
и переустановить? - person Mako212   schedule 15.07.2017.libPaths()
? Вы также можете использовать его для получения/установки деревьев библиотек, в которых ищутся пакеты. - person student   schedule 15.07.2017install.packages("tidyverse")
всегда пытается установитьreadxl
иhaven
заново. - person merv   schedule 15.07.2017libiconv
не является пакетом R и поэтому не находится в каталоге(ах) библиотеки R. Тем не менее, я попытался сделать символическую ссылку наlibiconv.so
в моей локальной папке библиотеки R, чтобы посмотреть, найдет ли ее там загрузчик: это не так. - person merv   schedule 15.07.2017ldd /<my_lib_path>/readxl/libs/readxl.so
, выполненного из R ? Может быть, это информативно. - person knb   schedule 17.07.2017src/readxl.so
, хотя он и не установился, и ваше предложение оказалось очень информативным. Спасибо за помощь! - person merv   schedule 19.07.2017