RNetCDF无法打开共享对象文件

问题描述:

我试图用命令RNetCDF无法打开共享对象文件

install.packages('RNetCDF',lib='/home/my_computer/RSCRIPTS/R_LIB/',configure.args="--with-netcdf-include='/home/my_computer/bin/libs4cdo-0.0.10/netcdf-4.2/include/' --with-netcdf-lib='/home/my_computer/local/bin' --with-hdf5-lib='/home/my_computer/local/lib/' --with-udunits-include='/usr/local/lib/' --with-udunits-lib='/usr/local/lib/'",repos='http://star-www.st-andrews.ac.uk/cran/') 

我的笔记本电脑(Ubuntu的12.04)安装RNetCDF包,但包不会安装。请参阅下面的消息:

trying URL 'http://star-www.st-andrews.ac.uk/cran/src/contrib/RNetCDF_1.6.1-2.tar.gz' 
Content type 'application/x-gzip' length 70301 bytes (68 Kb) 
opened URL 
================================================== 
downloaded 68 Kb 

* installing *source* package ‘RNetCDF’ ... 
** package ‘RNetCDF’ successfully unpacked and MD5 sums checked 
checking for gcc... gcc -std=gnu99 
checking for C compiler default output file name... a.out 
checking whether the C compiler works... yes 
checking whether we are cross compiling... no 
checking for suffix of executables... 
checking for suffix of object files... o 
checking whether we are using the GNU C compiler... yes 
checking whether gcc -std=gnu99 accepts -g... yes 
checking for gcc -std=gnu99 option to accept ISO C89... none needed 
checking for nc_open in -lnetcdf... yes 
checking for utInit in -ludunits2... no 
checking for utScan in -ludunits2... yes 
checking how to run the C preprocessor... gcc -std=gnu99 -E 
checking for grep that handles long lines and -e... /bin/grep 
checking for egrep... /bin/grep -E 
checking for ANSI C header files... yes 
checking for sys/types.h... yes 
checking for sys/stat.h... yes 
checking for stdlib.h... yes 
checking for string.h... yes 
checking for memory.h... yes 
checking for strings.h... yes 
checking for inttypes.h... yes 
checking for stdint.h... yes 
checking for unistd.h... yes 
checking netcdf.h usability... yes 
checking netcdf.h presence... yes 
checking for netcdf.h... yes 
checking udunits.h usability... yes 
checking udunits.h presence... yes 
checking for udunits.h... yes 
configure: creating ./config.status 
config.status: creating R/load.R 
config.status: creating src/Makevars 
** libs 
gcc -std=gnu99 -I/usr/share/R/include -I/usr/local/lib/ -I/home/bauduinm/bin/libs4cdo-0.0.10/netcdf-4.2/include/  -fpic -O3 -pipe -g -c RNetCDF.c -o RNetCDF.o 
gcc -std=gnu99 -shared -o RNetCDF.so RNetCDF.o -ludunits2 -lnetcdf -L/home/my_computer/local/lib/ -L/usr/local/lib/ -L/home/my_computer/local/bin -lexpat -L/usr/lib/R/lib -lR 
installing to /home/my_computer/RSCRIPTS/R_LIB/RNetCDF/libs 
** R 
** preparing package for lazy loading 
** help 
*** installing help indices 
** building package indices ... 
** testing if installed package can be loaded 
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
unable to load shared object '/home/my_computer/RSCRIPTS/R_LIB/RNetCDF /libs/RNetCDF.so': 
libexpat.so.0: cannot open shared object file: No such file or directory 
Error: loading failed 
Execution halted 
ERROR: loading failed 
* removing ‘/home/my_computer/RSCRIPTS/R_LIB/RNetCDF’ 

The downloaded packages are in 
‘/tmp/Rtmpl5MniY/downloaded_packages’ 
Warning message: 
In install.packages("RNetCDF", lib = "/home/my_computer/RSCRIPTS/R_LIB/", : 
    installation of package ‘RNetCDF’ had non-zero exit status 

当我试着使用

sudo R CMD INSTALL --libary='/home/my_computer/RSCRIPTS/R_LIB/' --configure-args="--with-netcdf-include='/home/my_computer/bin/libs4cdo-0.0.10/netcdf-4.2/include/' --with-netcdf-lib='/home/my_computer/local/lib/' --with-hdf5-lib='/home/my_computer/local/lib/' --with-udunits-include=/usr/local/lib/ --with-udunits-lib=/usr/local/lib/" /home/my_computer/Downloads/RNetCDF_1.6.1-2.tar.gz 

错误信息被替换

Error in dyn.load(file, DLLpath = DLLpath, ...) : 
unable to load shared object '/usr/local/lib/R/site-library/RNetCDF/libs/RNetCDF.so': 
    libnetcdf.so.7: cannot open shared object file: No such file or directory 

libnetcdf.so.7绝对是/home/my_computer/local/lib/这也是我LD_LIBRARY_PATH 。无可否认,libexpat.so.0是第一个错误信息(与install.packages)中的文件之一,位于intel相关文件夹中,看起来与netcdf库无关。

任何人都可以启发我吗?

谢谢。

编辑:好吧,我永远不会知道发生了什么事,因为当我在3天后再次尝试使用完全相同的install.packages命令行时,安装的软件包没有任何问题......因此,对于可能拥有同样的问题是注销R并重新开始,以防万一在会话中以前的错误留在日志中。

+1

在第一次尝试中,当它无法加载库时,它真的在这个路径中有一个空格:'/ home/my_computer/RSCRIPTS/R_LIB/RNetCDF/libs/RNetCDF.so',还是格式化问题当你把它粘贴到SO? – nograpes 2013-05-13 17:26:36

+0

此外,请阅读[本文](http://ubuntuforums.org/showthread.php?t=1034715)关于链接'libexpat.so.0'。如果您安装了较新的版本,您可能希望使用链接将软件包指向正确的位置(如帖子所示),我怀疑您会这样做。 – nograpes 2013-05-13 17:52:31

+0

'@ nograpes'感谢您的评论。这迫使我查看空间问题(这是SO问题的格式化),重新运行命令行,并意识到我今天可以毫无问题地安装软件包。 – SnowFrog 2013-05-14 08:54:08

尝试将--no-test-load添加到R CMD INSTALL,这样可以避免安装过程中的错误。

然后检查是否可以在正常的R会话中加载软件包(使用library(RNetCDF))。 如果失败是由于“无法加载共享对象”错误:如果R使用您的$ LD_LIBRARY_PATH与Sys.getenv("LD_LIBRARY_PATH")

  • 看的ldd /usr/local/lib/R/site-library/RNetCDF/libs/RNetCDF.so输出,看看libnetcdf.so.7是否解决

    1. 检查到R中所含的LD_LIBRARY_PATH

    BTW路径,我没有问题,使用附带的Ubuntu的安装libnetcdf RNetCDF(易于得到安装libnetcdf-dev的[4.1.1]);除非你确实需要libnetcdf的4.2版本,否则你可能想试试这个。