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

无法打开共享对象文件:没有此类文件或目录Rglpk,r,linux,cran,glpk,R,Linux,Cran,Glpk,我已经以root用户的身份在Redhat7的ec2实例上手动安装了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/co

我已经以
root
用户的身份在
Redhat7
的ec2实例上手动安装了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
问题是,当我在
R
cli中以root用户身份调用此库时,它工作正常,但当我切换到我的用户,即
ec2 user
,并在
R
cli中调用此库时,它开始为所有用户(即使是root用户)提供以下错误

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(ec2-user@resuerdsfdfsfdn02 [~])$ cd /usr/lib64/R/library/Rglpk/libs/
0(ec2-user@resuerdsfdfsfdn02 [/usr/lib64/R/library/Rglpk/libs])$ ls
Rglpk.so*

主要问题在于每当调用
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

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

动态加载(“/home/ec2 user/GLPK/lib/libglpk.so.0”)


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

根据我的经验
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"))
对于安装,我必须使用:

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

自动工具无法正确配置正在生成的程序。您需要正确配置库。您的
LDFLAGS
应该包括
-Wl,-R、/home/ec2 user/GLPK/lib-Wl、-enable新dtags
。那么你就不需要像
LD\u LIBRARY\u PATH
这样的黑客,它们在过去20年左右一直困扰着Linux。@jww,我对R和固有语言的编程范式非常陌生,请你详细解释一下这些标志和支持的材料。非常感谢