R:“系统”调用的OS命令找不到库

时间:2014-10-02 13:50:21

标签: r

我正在使用程序bedtools,当我从我的操作系统(CentOS release 6.4)调用它时它非常有效。 我尝试使用R system调用此程序,它给了我错误:

bedtools: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by bedtools)

我的R版本是:3.0.1 (2013-05-16) -- "Good Sport"

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

无法从R中运行bedtools的原因是shell环境与R之外的环境不同。这是关于如何追踪差异的建议,但由于我无法访问实际的计算机它包含了大量的猜测。

您的系统上似乎有多个libstdc++版本(需要运行bedtools)。运行以下命令以查看您拥有的那些:

$ locate libstdc++.so

/usr/lib/gcc/x86_64-redhat-linux/4.4.4/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libstdc++.so
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.13

然后对它们运行the following command以查看它们的版本是否不同

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

如果您在其中一个中找到GLIBCXX_3.4.15,请在R外的环境变量中搜索其目录,以查看它属于哪个目录:

$ set | grep "<path>"

当您找到合适的环境变量时,请按照@morispaa的建议,使用Sys.setenv在R中添加路径。

Sys.setenv(<VARIABLE> = paste0("<path>:", Sys.getenv("<VARIABLE>"))

祝你好运!

原始答案:

我怀疑您在.bashrc中设置了一些环境变量或类似的指出库的环境变量,也许您将其添加到$PATH

事实上,system表示您在新shell会话中提供的语句,其中.bashrc和类似的配置文件未来源。例如,我在HISTSIZE=1000中设置了变量.bashrc,我可以通过输入以下命令在bash中查看:

~$ echo $HISTSIZE
1000

但如果我在R中做同样的事情我什么也得不到

> system("echo $HISTSIZE")

另一方面,如果我设置它并在回应它之前我确实得到它(显然)

> system("export HISTSIZE=1000 && echo $HISTSIZE")
1000

但是system电话完成后,如果我再做一次

,它就不再存在了
> system("echo $HISTSIZE")