web-dev-qa-db-fra.com

Installer nloptr sur Linux

J'essaie d'installer le package R nloptr sur une machine Linux CentOS ne disposant pas d'une connexion Internet, comme suit:

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

Cette commande à son tour cherche le fichier suivant en ligne 

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

Cependant, cela échoue car il n'y a pas de connexion Internet à la machine. 

J'ai essayé la suggestion du post stackoverflow suivant:

problème avec l'installation de nloptr en local sur Ubuntu

J'ai changé l'URL dans les fichiers configure et configure.ac comme suit:

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

Cependant, le message d'erreur suivant s'affiche lorsque j'essaie d'installer à nouveau le paquet:

> 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

Est-ce que quelqu'un peut me guider sur la façon d'installer ce paquet R localement?

Mise à jour 1

Sur la base de la suggestion de Dirk concernant l’installation préalable de nlopt, j’ai suivi les instructions données à la page suivante:

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

J'ai installé nlopt comme suit:

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

Lorsque j'ai essayé de réinstaller nloptr dans R, il ne recherche plus le lien nlopt mais génère l'erreur suivante:

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

Mise à jour 2

Comme suggéré par Dirk, j'ai examiné la commande ldconfig et utilisé la référence suivante:

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

J'ai modifié le fichier /etc/ld.so.conf, ajouté le répertoire/usr/local/lib qui contient la bibliothèque partagée et exécuté la commande ldconfig. Ceci a ajouté la bibliothèque partagée appropriée comme indiqué ci-dessous:

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

Cependant, lorsque j'ai essayé de réinstaller le paquet nloptr, j'obtiens toujours la même erreur d'objet partagé.

Quelqu'un pourrait-il me guider sur l'erreur de la bibliothèque partagée?

29
Ravi

Lorsque vous dites [cette] commande, à son tour, recherche le fichier suivant en ligne, vous ne recevez que la moitié de l'histoire. Avec Jelmer, le responsable du package nloptr, j'ai modifié le package pour effectuer les opérations suivantes:

  • cherche une bibliothèque d'installation libnlopt et, si vous la trouvez, utilisez-la
  • sinon retrouvez l'ancien comportement et téléchargez la bibliothèque

Vous pouvez donc simplement installer nlopt via

 Sudo apt-get install libnlopt-dev

(ou l'équivalent Sudo dpkg -i /media/.... pointant vers le fichier depuis un lecteur USB, etc. pp), puis réinstallez le package nloptr. Ça va juste marcher. Sur ma machine:

edd@max:~$ 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’
edd@max:~$ 

Notez comment il n’a compilé que deux fichiers à partir des packages R réels ayant trouvé l’installation de nlopt.

30
Dirk Eddelbuettel

J'ai eu exactement le même problème, sur une machine de production sans accès direct à Internet, avec Red Hat Enterprise Linux Server version 6.6 (Santiago). Les corrections proposées ci-dessus ne fonctionnaient pas: lors de l'installation de la bibliothèque nlopt sur le système, la tentative d'installation ultérieure de nloptr échouait avec l'erreur "nlopt_set_maxtime". J'ai essayé de bricoler les options de compilation pour nlopt, en vain. J'ai même reproduit le problème sur une machine Ubuntu avec connexion Internet: j'ai désinstallé nloptr, installé nlopt sur le système, puis l'installation nloptr a échoué.

Enfin, j'ai résolu le problème en prenant les mesures suivantes:

  1. Désinstallez nlopt du système d'exploitation (assurez-vous qu'il est complètement supprimé).
  2. Téléchargez manuellement nlopt-2.4.2.tar.gz et copiez-le dans/tmp /
  3. Téléchargez manuellement nloptr_1.0.4.tar.gz dans un répertoire de travail et décompressez-le; cela crée le répertoire "nloptr /".
  4. Editez "nloptr/configure", commentez la ligne 

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

    et insérez une nouvelle ligne:

    $ ("$ {R_HOME}/bin/Rscript" --Vanilla -e "Fichier.copie (à partir de = '/ tmp/nlopt-2.4.2.tar.gz', à = '$ {NLOPT_TGZ}' ) ")

  5. Installer avec "R CMD INSTALL nloptr".

13
renato vitolo

J'ai eu un problème similaire sur Ubuntu. En plus d'installer nlopt-dev en tant que Dirk a répondu , j'ai également dû installer pkg-config:

Sudo apt-get install pkg-config

J'espère que cela t'aides.

12
Ole Høst

Si vous êtes sur CentOS (et avez un accès Internet, mais le serveur nlopt n’est pas accessible), vous pouvez installer nlopt d’abord en utilisant 

yum install nlopt nlopt-devel

Ensuite, vous pouvez installer nloptr normalement.

6
Xiongbing Jin

J'ai eu le même problème lors de la configuration de nloptr sur mon instance RHEL 7.2. Pour ceux qui utilisent RHEL, vous pouvez effectuer les opérations suivantes: Téléchargez et installez le RPMS suivant dans le même ordre:

Veuillez noter que ces RPM peuvent nécessiter l'installation de dépendances supplémentaires en fonction de la configuration de votre système. 

Si vous publiez cela, vous pouvez installer nloptr directement à l’aide de l’utilitaire install.packages ou télécharger la source à partir de CRAN et installer à partir de la source comme suggéré dans les réponses précédentes.

J'espère que cela t'aides!

Kiran

3
Kiran Kaipa

si vous utilisez AWS Linux, les solutions ci-dessous devraient vous aider.

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