我已经以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
答案 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'