在 Scientific Linux 6.6 中的非标准位置安装 minqa 时出错

Error installing minqa in a non-standard location in Scientific Linux 6.6

我最终想在装有 Scientific Linux 6.6 的系统上为 R-3.2.5 安装 lme4。我在共享系统上(我正在为分布式计算问题编译 R 包),所以我需要将所有包安装到非标准位置(/a/lot/of/subdirectories/R-3.2.5 而不是通常的 /usr/local/).

我在安装 lme4 依赖项 nloptr 时遇到了很多麻烦,它无法使用 R 中常用的 install.packages 命令进行安装。我最终下载 nlopt-2.4.2.tar.gz、安装它,然后在 R 中调用 install.packages 时链接到已安装的库。我现在在安装 minqa 库时遇到问题,这是另一个 lme4 依赖项。这是我尝试在 R 中安装 minqa 以下命令时的错误消息:install.packages("minqa")

trying URL 'http://cran.revolutionanalytics.com/src/contrib/minqa_1.2.4.tar.gz'
Content type 'application/octet-stream' length 53548 bytes (52 KB)
==================================================
downloaded 52 KB

* installing *source* package ‘minqa’ ...
** package ‘minqa’ successfully unpacked and MD5 sums checked
** libs
gfortran   -fpic  -g -O2  -c altmov.f -o altmov.o
gfortran   -fpic  -g -O2  -c bigden.f -o bigden.o
gfortran   -fpic  -g -O2  -c biglag.f -o biglag.o
gfortran   -fpic  -g -O2  -c bobyqa.f -o bobyqa.o
gfortran   -fpic  -g -O2  -c bobyqb.f -o bobyqb.o
gfortran   -fpic  -g -O2  -c lagmax.f -o lagmax.o
g++ -I/var/lib/condor/execute/slot1/dir_20833/R-3.2.5/lib64/R/include -DNDEBUG  -I/usr/local/include -I"/var/lib/condor/execute/slot1/dir_20833/R-3.2.5/lib64/R/library/Rcpp/include"   -fpic  -g -O2  -c minqa.cpp -o minqa.o
gfortran   -fpic  -g -O2  -c newuoa.f -o newuoa.o
gfortran   -fpic  -g -O2  -c newuob.f -o newuob.o
gfortran   -fpic  -g -O2  -c prelim.f -o prelim.o
gfortran   -fpic  -g -O2  -c rescue.f -o rescue.o
gfortran   -fpic  -g -O2  -c trsapp.f -o trsapp.o
gfortran   -fpic  -g -O2  -c trsbox.f -o trsbox.o
gfortran   -fpic  -g -O2  -c trstep.f -o trstep.o
gfortran   -fpic  -g -O2  -c uobyqa.f -o uobyqa.o
gfortran   -fpic  -g -O2  -c uobyqb.f -o uobyqb.o
gfortran   -fpic  -g -O2  -c update.f -o update.o
gfortran   -fpic  -g -O2  -c updatebobyqa.f -o updatebobyqa.o
g++ -shared -L/usr/local/lib64 -o minqa.so altmov.o bigden.o biglag.o bobyqa.o bobyqb.o lagmax.o minqa.o newuoa.o newuob.o prelim.o rescue.o trsapp.o trsbox.o trstep.o uobyqa.o uobyqb.o update.o updatebobyqa.o Fatal error: creating temporary file for '-e' failed -lgfortran -lm
g++: Fatal: No such file or directory
g++: error:: No such file or directory
g++: creating: No such file or directory
g++: temporary: No such file or directory
g++: file: No such file or directory
g++: for: No such file or directory
g++: '-e': No such file or directory
g++: failed: No such file or directory
make: *** [minqa.so] Error 1
ERROR: compilation failed for package ‘minqa’
* removing ‘/var/lib/condor/execute/slot1/dir_20833/R-3.2.5/lib64/R/library/minqa’

The downloaded source packages are in
        ‘/var/lib/condor/execute/slot1/dir_20833/RtmpruzdgN/downloaded_packages’
Updating HTML index of packages in '.Library'
Making 'packages.html' ... done
Warning message:
In install.packages("minqa") :
  installation of package ‘minqa’ had non-zero exit status

看起来 install.packages 中的 g++ 试图引用位置 /usr/local/lib64 而不是我安装 R 的实际位置。关于如何解决这个问题的任何想法?有没有我可以传递给 install.packages 的参数(例如,使用 configure.args 选项)来告诉 g++ 做什么?

这里有几件事。

,位置无所谓。 R 可以使用 .libPaths() 或几个环境变量之一,可以轻松安装到任何你想安装的地方。详见help(Startup)install.packages()也有直接选项。

第二,虽然您的目标可能是lme4,但您需要一一解决依赖关系。如果 nloptr 是问题所在,请在此处查看有关它的众多问题。我为它贡献了一个补丁,可以使 nlopt 针对系统 libnlopt 进行构建——然后就很容易了(至少在 Debian/Ubuntu 上)。 nloptr 的较新 github 来源也将其捆绑。

第三,这么难真的要科学Linux吗?在 Linux 的其他几个版本中,这只是 sudo apt-get install r-cran-lme4 并且包 及其所有依赖项 将从二进制文件安装。

解决方案是多管齐下的:

  1. 使用 devtools 包中的 install_github 从 Github 安装 nloptr。我发现,问题是由于我用来安装 nloptr 的解决方法,minqa 在错误的位置寻找各种 nloptr 库。 Github 上 nloptr 的开发版本似乎使用了不同的方法来安装 nlopt 库,没有引发错误
  2. 调用install.packages时,使用lib=.libPaths()[2]设置正确的库路径
  3. 在 R 中使用 install.packages 时遇到错误,请尝试使用 R 外部的 R CMD INSTALL 代替

综合起来,这些不同的方法似乎解决了我所有的问题。