2013-10-01 3 views
8

У меня возникли проблемы с RMPI, где я стараюсь, чтобы загрузить его, и я получаю сообщение об ошибке:RMPI не удалось загрузить совместно используемые библиотеки как не суперпользователя

> library('Rmpi') 
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
    unable to load shared library '/usr/lib64/R/library/Rmpi/libs/Rmpi.so': 
    libmpi.so.0: cannot open shared object file: No such file or directory 
In addition: Warning message: 
.Last.lib failed in detach() for 'Rmpi', details: 
    call: dyn.unload(file.path(libpath, "libs", paste("Rmpi", .Platform$dynlib.ext, 
    error: dynamic/shared library '/usr/lib64/R/library/Rmpi/libs/Rmpi.so' was not loaded 
Error in library("Rmpi") : .First.lib failed for 'Rmpi' 

Эта ошибка не происходит, когда я вошел в систему как пользователь root.

Это не проблема с разрешениями. Я проверил разрешения на libmpi.so.0:

[[email protected] /]$ ll /usr/lib64/lam/lib/ 
total 7.4M 
-rw-r--r-- 1 root root 207 May 25 2008 lam.module 
-rw-r--r-- 1 root root 885K May 25 2008 liblam.a 
-rw-r--r-- 1 root root 361K May 25 2008 liblamf77mpi.a 
lrwxrwxrwx 1 root root 21 Apr 12 2010 liblamf77mpi.so -> liblamf77mpi.so.0.0.0 
lrwxrwxrwx 1 root root 21 Apr 12 2010 liblamf77mpi.so.0 -> liblamf77mpi.so.0.0.0 
-rwxr-xr-x 1 root root 73K May 25 2008 liblamf77mpi.so.0.0.0 
-rw-r--r-- 1 root root 2.2M May 25 2008 liblammpi++.a 
-rw-r--r-- 1 root root 509K May 25 2008 liblammpio.a 
lrwxrwxrwx 1 root root 20 Apr 12 2010 liblammpi++.so -> liblammpi++.so.0.0.0 
lrwxrwxrwx 1 root root 20 Apr 12 2010 liblammpi++.so.0 -> liblammpi++.so.0.0.0 
-rwxr-xr-x 1 root root 167K May 25 2008 liblammpi++.so.0.0.0 
lrwxrwxrwx 1 root root 15 Apr 12 2010 liblam.so -> liblam.so.0.0.0 
lrwxrwxrwx 1 root root 15 Apr 12 2010 liblam.so.0 -> liblam.so.0.0.0 
-rwxr-xr-x 1 root root 332K May 25 2008 liblam.so.0.0.0 
-rw-r--r-- 1 root root 2.2M May 25 2008 libmpi.a 
lrwxrwxrwx 1 root root 15 Apr 12 2010 libmpi.so -> libmpi.so.0.0.0 
lrwxrwxrwx 1 root root 15 Apr 12 2010 libmpi.so.0 -> libmpi.so.0.0.0 
-rwxr-xr-x 1 root root 655K May 25 2008 libmpi.so.0.0.0 

И Rmpi.so:

[[email protected] /]$ ll /usr/lib64/R/library/Rmpi/libs/ 
total 108K 
-rwxr-xr-x 1 root root 104K Jan 20 2011 Rmpi.so 

Я бегу R как Судо в любом случае.

Соответствующая система информации: -Linux Дистрибутив: CentOS 5.5 -R версия: 2.11.1 (2010-05-31) -Rmpi версия: 0.5-8 -mpi реализация OpenMPI

[[email protected] /]$ echo $LD_LIBRARY_PATH 
/opt/lib:/opt/open-mpi/tcp-`gnu41/lib:/opt/intel/mkl/10.2/lib/em64t:/opt/intel/fce/11.1/lib:/opt/intel/cce/11.1/lib:` 

Любая помощь была бы очень признательна!

+0

'ldd' может помочь здесь, попробуйте' ldd/usr/lib64/R/library/Rmpi ​​/ libs/Rmpi.so' посмотреть, на какие библиотеки он ссылается, некоторые из них могут быть недоступны. Еще больший молот должен использовать 'strace' и искать неисправность' open() ' –

+0

. Ваш' LD_LIBRARY_PATH' выглядит неудобно. И даже если эти обратные ссылки появились при публикации здесь, '/ usr/lib64/lam/lib' не является частью пути к библиотеке.Кроме того, вы уверены, что это версия MPI, с которой связан «Rmpi»? Смешивание различных реализаций MPI не работает 99,9% времени. –

+0

Я знаю, что это старый поток, но у меня точно такая же проблема. Кто-нибудь нашел решение? – SwatchPuppy

ответ

3

Проблема заключается в том, что OpenMPI по умолчанию не регистрирует каталог библиотек системным компоновщиком. Вот почему некоторые руководства по установке рекомендуют вам поместить свои каталоги в свою переменную LD_LIBRARY_PATH, чтобы библиотеки можно было найти во время выполнения. Однако «добавление каталогов в LD_LIBRARY_PATH» должно выполняться каждый раз, когда загружается новая оболочка, поэтому эти руководства предлагают поместить ее в ~/.bashrc или тому подобное, чтобы этот параметр восстанавливался при каждом входе в систему.

Однако файл ~/.bashrc (или ~/.profile, или любой такой) является конкретным пользователем настройки. Предполагая, что один из них зарегистрирован в качестве пользователя root при установке openmpi и Rmpi ​​и т. П., Что кажется вероятным, это означает, что добавление к этим пользовательским файлам будет устанавливать только пути библиотеки при работе от имени пользователя root, а не как обычный пользователь времени выполнения ,

Исправить, в общем, сообщить компоновщику, где эти файлы могут быть найдены. В моей собственной системе, в которой работает CentOS 7, OpenMPI 1.10.0 (с использованием RPM Scientific Linux), R 3.2.3 и Rmpi ​​0.6-5, это происходит, когда я не могу установить путь к библиотеке:

[[email protected] ~]$ R -q -e "library('Rmpi')" 
> library('Rmpi') 
Error : .onLoad failed in loadNamespace() for 'Rmpi', details: 
    call: dyn.load(file, DLLpath = DLLpath, ...) 
    error: unable to load shared object '/usr/lib64/R/library/Rmpi/libs/Rmpi.so': 
    libmpi.so.12: cannot open shared object file: No such file or directory 
Error: package or namespace load failed for ‘Rmpi’ 
Execution halted   

Если я временно установить путь компоновщика с временной переменной, она работает для этого вызова:

[[email protected] ~]$ LD_LIBRARY_PATH=/usr/lib64/openmpi/lib R -q -e "library('Rmpi')" 
> library('Rmpi')  
> 
> 

Однако, чтобы сделать эти изменения постоянными, лучший способ сделать это состоит в регистрации OpenMPI библиотеки каталог с самим системным компоновщиком, создав новый файл в /etc/ld.so.conf.d и запустив ldconfig, так как:

[[email protected] ~]$ sudo sh -c 'echo /usr/lib64/openmpi/lib > /etc/ld.so.conf.d/openmpi.conf; ldconfig' 
[[email protected] ~]$ R -q -e "library('Rmpi')" 
> library('Rmpi') 
> 
> 

После того, как вы это сделали, Rmpi ​​должен быть загружен для любого пользователя независимо от переменных окружения.

Смежные вопросы