Installation de nloptr sur Linux

J'essaie d'installer le paquet R nloptr sur une machine CentOS Linux qui n'a pas de connexion internet comme suit:

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

Cette commande recherche à son tour 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 configurer et configure.ac fichiers comme suit:

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

Cependant, j'obtiens l'erreur suivante 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

Quelqu'un peut-il me guider sur la façon d'installer ce paquet r localement?

Mise à Jour 1

Sur la base de la suggestion de Dirk sur l'installation de nlopt en premier, j'ai suivi les instructions données dans 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

Quand j'ai essayé de réinstaller nloptr dans R, Il ne cherche plus le lien nlopt mais lance 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 regardé dans 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 édité le fichier/etc / ld.so.conf, ajouté le répertoire / usr / local / lib qui contient le bibliothèque et a exécuté la commande ldconfig. Cela a ajouté la bibliothèque partagée pertinente 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 bibliothèque partagée?

29
demandé sur Community 2015-04-18 14:44:19

7 réponses

Lorsque vous dites [t]sa commande recherche à son tour le fichier suivant en ligne Vous n'obtenez que la moitié de l'histoire. Avec Jelmer, le responsable du paquet nloptr, j'ai modifié le paquet pour faire ce qui suit:

  • recherchez une bibliothèque libnlopt d'installation et, si elle est trouvée, utilisez-la
  • s'il n'est pas trouvé, reprenez 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 à partir d'un Lecteur USB etc pp), puis réinstallez le paquet nloptr. Le tout fonctionne. 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 a compilé seulement deux fichiers à partir des paquets R réels ayant trouvé l'installation nlopt.

30
répondu Dirk Eddelbuettel 2015-04-18 12:07:12

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 release 6.6 (Santiago). Les correctifs proposés ci-dessus n'ont pas fonctionné: lors de l'installation de la bibliothèque nlopt sur le système, la tentative suivante d'installation de nloptr échoue avec l'erreur "nlopt_set_maxtime". J'ai essayé de jouer avec 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 de nloptr a échoué.

Enfin, j'ai résolu le problème en procédant comme suit:

  1. désinstallez nlopt du système d'exploitation (assurez - vous qu'il est complètement supprimé).
  2. télécharger manuellement nlopt-2.4.2.tar.gz et copiez-le dans / tmp /
  3. télécharger 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. Éditez "nloptr / configure", commentez la ligne

    $("${R_HOME}/bin/Rscript" --vanille -e "télécharger.fichier(url='${NLOPT_URL}', destfile='${NLOPT_TGZ}')")

    Et insérez une nouvelle ligne:

    $("${R_HOME}/bin/Rscript" --vanille -e "fichier.copie(de='/tmp/nlopt-2.4.2.tar.gz', to= ' ${NLOPT_TGZ}')")

  5. Installer avec "R cmd INSTALL nloptr".

13
répondu renato vitolo 2016-08-25 19:42:30

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

sudo apt-get install pkg-config

J'espère que cela aide.

12
répondu Ole Høst 2017-05-23 12:34:19

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

yum install nlopt nlopt-devel

, Alors vous pouvez installer nloptr normalement.

6
répondu Xiongbing Jin 2016-07-08 15:35:56

J'ai eu le même problème en configurant nloptr sur mon instance RHEL 7.2. Pour ceux qui utilisent RHEL vous pouvez faire ce qui suit: Téléchargez et installez les RPM suivants dans le même ordre:

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

Postez ceci vous pouvez installer nloptr directement en utilisant l'installation.packages utilitaire ou télécharger la source de CRAN et installer à partir de la source comme suggéré dans les réponses précédentes.

J'espère que cela aide!

Kiran

3
répondu Kiran Kaipa 2016-05-13 06:36:52

Si vous utilisez AWS Linux, ce qui suit devrait aider

yum --enablerepo=epel install NLopt-devel -y
0
répondu LJT 2017-09-26 23:47:47

Je pense avoir le même problème que vous et j'utilise CentOS 6.5 Retirez nlopt et installez nloptr avec install.packages() dans R, un nlopt sera installé automatiquement.

J'ai supprimé nlopt installé avec la commande suivante dans le dossier nlopt décompressé.

make uninstall 

Si vous avez essayé d'utiliser le référentiel epel dans CentOS et que vous avez installé nlopt avec yum, essayez:

yum remove nlopt

Après avoir supprimé existait nlopt, je suis en mesure d'installer nloptr avec

install.packages("nloptr")
-2
répondu Sijie Chen 2015-12-01 08:22:20