Подтвердить что ты не робот

Установка nloptr на Linux

Я пытаюсь установить пакет R nloptr на компьютере CentOS Linux, который не имеет подключения к Интернету следующим образом:

install.packages("/home/ravi/nloptr_1.0.4.tar.gz", repos = NULL, type="source")

Эта команда, в свою очередь, ищет следующий файл в Интернете

http://ab-initio.mit.edu/nlopt/nlopt-2.4.2.tar.gz

Однако это не удается, так как нет подключения к Интернету.

Я попробовал предложение из следующего сообщения stackoverflow:

проблема с установкой nloptr локально на Ubuntu

Я изменил URL в файлах configure и configure.ac следующим образом:

NLOPT_URL="file:///home//ravi//${NLOPT_TGZ}"

Однако при попытке установить пакет снова возникает следующая ошибка:

> install.packages("/home/ravi/nloptr_1.0.4.tar.gz", repos = NULL, type="source")
* installing *source* package 'nloptr' ...
files 'configure', 'configure.ac' have the wrong MD5 checksums
ERROR: 'configure' exists but is not executable -- see the 'R Installation and Administration Manual'
* removing '/opt/vertica/R/library/nloptr'
Warning message:
In install.packages("/home/ravi/nloptr_1.0.4.tar.gz",  :
  installation of package '/home/ravi/nloptr_1.0.4.tar.gz' had non-zero exit status

Может ли кто-нибудь помочь мне установить этот R-пакет локально?

Обновление 1

Основываясь на предложении от Dirk при первом установлении nlopt, я выполнил инструкции, приведенные на следующей странице:

http://ab-initio.mit.edu/wiki/index.php/NLopt_Installation

Я установил nlopt следующим образом:

./configure --enable-shared
make
make install
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib

Когда я попытался переустановить nloptr в R, он больше не ищет ссылку nlopt, но вызывает следующую ошибку:

Error in dyn.load(file, DLLpath = DLLpath, ...) :
  unable to load shared object '/opt/vertica/R/library/nloptr/libs/nloptr.so':
  /opt/vertica/R/library/nloptr/libs/nloptr.so: undefined symbol:   nlopt_set_maxtime
Error: loading failed
Execution halted
ERROR: loading failed
* removing '/opt/vertica/R/library/nloptr'
Warning message:
In install.packages("/home/ravi/nloptr_1.0.4.tar.gz",  :
  installation of package '/home/ravi/nloptr_1.0.4.tar.gz' had non-zero exit     status

Обновление 2

Как предложил Дирк, я просмотрел команду ldconfig и использовал следующую ссылку:

http://codeyarns.com/2014/01/14/how-to-add-library-directory-to-ldconfig-cache/

Я редактировал файл /etc/ld.so.conf, добавлял каталог /usr/local/lib, который содержит общую библиотеку и запускал команду ldconfig. Это добавило соответствующую общую библиотеку, как показано ниже:

libnlopt.so.0 (libc6,x86-64) => /usr/local/lib/libnlopt.so.0
libnlopt.so (libc6,x86-64) => /usr/local/lib/libnlopt.so

Однако, когда я попытался переустановить пакет nloptr, я все равно получаю ту же ошибку общего объекта.

Может ли кто-нибудь вести меня по ошибке общей библиотеки?

4b9b3361

Ответ 1

Когда вы говорите [t], его команда, в свою очередь, ищет следующий файл в Интернете, вы получаете только половину истории. Вместе с Jelmer, сопровождающим фактического пакета nloptr, я модифицировал пакет, чтобы сделать следующее:

  • найдите библиотеку install libnlopt, и, если она найдена, используйте ее
  • Если не найдено, вернитесь к старому поведению и загрузите библиотеку

Итак, вы можете просто установить nlopt через

 sudo apt-get install libnlopt-dev

(или эквивалент sudo dpkg -i /media/...., указывающий на файл из USB-накопитель и т.д.), А затем переустановите пакет nloptr. Он будет работать. На моей машине:

[email protected]:~$ install.r nloptr         ## install.r is in littler
trying URL 'http://cran.rstudio.com/src/contrib/nloptr_1.0.4.tar.gz'
Content type 'application/x-gzip' length 353942 bytes (345 KB)
==================================================
downloaded 345 KB

* installing *source* package ‘nloptr’ ...
** package ‘nloptr’ successfully unpacked and MD5 sums checked
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking how to run the C++ preprocessor... g++ -E
checking whether we are using the GNU C++ compiler... (cached) yes
checking whether g++ accepts -g... (cached) yes
checking for pkg-config... yes
configure: Now testing for NLopt header file.
[...]
checking for nlopt.h... yes
configure: Suitable NLopt library found.
configure: creating ./config.status
config.status: creating src/Makevars
** libs
g++ -I/usr/share/R/include -DNDEBUG      -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g  -O3 -Wall -pipe -Wno-unused -pedantic  -c dummy.cpp -o dummy.o
gcc -I/usr/share/R/include -DNDEBUG      -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g  -O3 -Wall -pipe -pedantic -std=gnu99 -c nloptr.c -o nloptr.o
g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o nloptr.so dummy.o nloptr.o -lnlopt -lm -L/usr/lib/R/lib -lR
installing to /usr/local/lib/R/site-library/nloptr/libs
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
* DONE (nloptr)

The downloaded source packages are in
        ‘/tmp/downloaded_packages’
[email protected]:~$ 

Обратите внимание, что он скомпилировал только два файла из реальных пакетов R, которые обнаружили установку nlopt.

Ответ 2

У меня была точно такая же проблема на производственной машине без прямого доступа к Интернету с выпуском Red Hat Enterprise Linux Server 6.6 (Сантьяго). Исправления, предложенные выше, не помогли: при установке библиотеки nlopt в системе последующая попытка установки nloptr завершилась с ошибкой "nlopt_set_maxtime". Я пытался возиться с вариантами компиляции для nlopt, но безрезультатно. Я даже воспроизвел проблему на машине Ubuntu с подключением к Интернету: я удалил nloptr, установил nlopt в систему, а затем завершилась установка nloptr.

Наконец, я решил проблему, выполнив следующие шаги:

  • Un-install nlopt из операционной системы (убедитесь, что он полностью удален).
  • Вручную скачайте nlopt-2.4.2.tar.gz и скопируйте его в /tmp/
  • Вручную скачайте nloptr_1.0.4.tar.gz в рабочий каталог и распакуйте его; это создает каталог "nloptr/".
  • Измените "nloptr/configure", закомментируйте строку

    $( "$ {R_HOME}/bin/Rscript" --vanilla -e "download.file(url = '$ {NLOPT_URL}', destfile = '$ {NLOPT_TGZ}')" )

    и вставьте новую строку:

    $( "$ {R_HOME}/bin/Rscript" --vanilla -e "file.copy(from = '/tmp/nlopt-2.4.2.tar.gz', to = '$ {NLOPT_TGZ}')" )

  • Установить с помощью "R CMD INSTALL nloptr".

Ответ 3

У меня была аналогичная проблема с Ubuntu. В дополнение к установке nlopt-dev как Dirk ответил, мне также пришлось установить pkg-config:

sudo apt-get install pkg-config

Надеюсь, что это поможет.

Ответ 4

Если вы находитесь в CentOS (и имеете доступ к Интернету, но сервер nlopt недоступен), вы можете установить nlopt сначала, используя

yum install nlopt nlopt-devel

Затем вы можете установить nloptr как обычно.

Ответ 5

У меня была такая же проблема с настройкой nloptr на моем экземпляре RHEL 7.2. Для тех, кто использует RHEL, вы можете сделать следующее: Загрузите и установите следующие RPMS в том же порядке:

Обратите внимание, что для этих RPM могут потребоваться дополнительные зависимости, которые будут установлены на основе вашей конфигурации системы.

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

Надеюсь, это поможет!

Киран

Ответ 6

если вы используете AWS Linux, ниже должно помочь

yum --enablerepo=epel install NLopt-devel -y

Ответ 7

Я думаю, что у меня такая же проблема, как у вас, и я использую CentOS 6.5 Удалите nlopt и установите nloptr с install.packages() в R, nlopt будет установлен автоматически.

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

make uninstall 

Если вы пытались использовать репозиторий epel в CentOS и установили nlopt с yum, попробуйте:

yum remove nlopt

После удаления существующего nlopt, я могу установить nloptr с

install.packages("nloptr")