2015-06-05 67 views
1

我已经在intel13上安装了R-3.0.1,并且正在尝试安装reshape2版本1.2.2。我是从源与R CMD INSTALL reshape2安装它,但我得到了以下错误:使用未定义符号安装R程序包

Error in dyn.load(file, DLLpath = DLLpath, ...) : 
    unable to load shared object '/sonas/hpcf/apps/R/install/intel13/3.0.1/lib64/R/library/stringi/libs/stringi.so': 
    /sonas/hpcf/apps/R/install/intel13/3.0.1/lib64/R/library/stringi/libs/stringi.so: undefined symbol: _intel_fast_memmove 
ERROR: lazy loading failed for package ‘reshape2’ 

所以我在想,stringi.so编译(正确?)与共享英特尔库,但也许reshape2是无法看到这些库?如何安装reshape2以及用于定义符号所需的共享库?

仅供参考,我在RHEL 6.4在动态加载环境(如R和Python)安装

回答

0

此问题经常发生足够时英特尔编译器的一个以上的版本是在系统上存在,并用于编译不同的东西。

如果R本身已经使用gcc进行编译,出现此问题的一种可能性是stringi.so已使用(旧)Intel编译器v12.1.5编译,而另一个库(先前加载到R中)使用较新的英特尔编译器14.0.2。会发生什么是第一个库引入了第二个库的某些依赖关系,并且由于共享库的共享依赖关系是共享的,所以旧的不会被加载,并且这些符号的名称会发生​​一些变化,从而导致错误。这正是Python,numpy和pytables发生的情况。

现在,如果你没有加载任何其他库,它可能是R本身已经建立了一个不同版本的英特尔编译器,但是这对我来说很难想象,因为我宁可期待一个编译stringi.so问题(假设它也需要链接到R本身)。

底线,您需要确保在运行时加载的所有库都使用相同版本的编译器进行编译。根据我的经验,混合gcc和Intel编译器比混合两个不同版本的Intel编译器本身更加节省。

相关问题