无法打开共享对象文件:没有此类文件或目录Rglpk

时间:2018-07-18 05:26:41

标签: r linux cran glpk

我已经以root用户的身份在Redhat 7的ec2-instance上以以下方式手动安装了R软件包“ Rglpk”:

mkdir -p GLPK
wget http://ftp.gnu.org/gnu/glpk/glpk-4.47.tar.gz
tar xvf glpk-4.47.tar.gz
cd glpk-4.47
./configure --prefix=/home/ec2-user/GLPK
make
make install
cd ..

wget https://cran.r-project.org/src/contrib/Rglpk_0.6-3.tar.gz
tar xvf Rglpk_0.6-3.tar.gz
mv glpk-4.47 /home/ec2-user/Rglpk/src/GLPK
export LD_LIBRARY_PATH=/home/ec2-user/GLPK/lib
export LIBRARY_PATH=/home/ec2-user/GLPK/lib
export CPATH=/home/ec2-user/GLPK/include
R CMD INSTALL Rglpk

问题是当我以root用户身份在R cli中调用此库时,它工作正常,但是当我切换到用户ec2-user并一次在{{1}中调用此库时} cli,它开始为所有用户甚至是root用户给出以下错误。

R

该文件仍位于该位置:

library("Rglpk")
Loading required package: slam
Error: package or namespace load failed for ‘Rglpk’ in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/usr/lib64/R/library/Rglpk/libs/Rglpk.so':
  libglpk.so.0: cannot open shared object file: No such file or directory

3 个答案:

答案 0 :(得分:0)

主要问题在于,每当调用Rglpk或任何其他R包时,它们都无法找到诸如libglpk.so.0之类的文件,因为环境变量是在本地执行的,指向其位置直到用户cli存在。因此在系统范围内设置环境变量,以便该库可以访问不考虑用户:

1)编辑/etc/bashrc

2)最后将以下变量放入其中:

export LD_LIBRARY_PATH=/home/ec2-user/GLPK/lib
export LIBRARY_PATH=/home/ec2-user/GLPK/lib
export CPATH=/home/ec2-user/GLPK/include

3)重新加载文件:

source /etc/bashrc

答案 1 :(得分:0)

问题在于libglpk.so.0不在RStudio服务器的R环境中,即使它在您从终端会话中调用的R环境中。这不理想,但是一个解决方案是在.Rprofile文件中添加以下行:

  

dyn.load(“ / home / ec2-user / GLPK / lib / libglpk.so.0”)

这将从您指定的路径加载共享库,而不是让R从您的环境推断路径。如果您的RStudio服务器是通过与实例上默认的ec2-user配置文件不同的帐户运行的,则只需将上述路径中的“ ec2-user”替换为您使用的用户名即可。完成后,您应该可以从RStudio服务器会话中调用“ Rglpk”。

答案 2 :(得分:0)

根据我的经验,dyn.load加载了程序包,但不足以使用函数。所以我用:

dyn.load("/home/ec2-user/GLPK/lib/libglpk.so.40") 
Sys.getenv("LD_LIBRARY_PATH")
Sys.setenv(LD_LIBRARY_PATH=paste0(Sys.getenv("LD_LIBRARY_PATH"), ":", "/home/ec2-user/GLPK/lib"))

对于INSTALL,我必须使用:

export PKG_CFLAGS='-I/home/user/GLPK/include'
export PKG_LIBS='-L/home/user/GLPK/lib'