RNetCDF无法打开共享对象文件

时间:2013-05-10 16:46:37

标签: r netcdf

我正在尝试使用命令在我的笔记本电脑(Ubuntu 12.04)上安装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/')

但是包装不会安装。请参阅以下信息:

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 个答案:

答案 0 :(得分:3)

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

然后检查是否可以在正常的R会话中加载包(使用library(RNetCDF))。 如果由于“无法加载共享对象”错误而失败:

  1. 检查R是否将{LD_LIBRARY_PATH与Sys.getenv("LD_LIBRARY_PATH")
  2. 一起使用
  3. 查看ldd /usr/local/lib/R/site-library/RNetCDF/libs/RNetCDF.so的输出,看看libnetcdf.so.7是否已解析为包含在R的LD_LIBRARY_PATH中的路径
  4. BTW,我使用Ubuntu附带的libnetcdf安装RNetCDF没有问题(apt-get install libnetcdf-dev [version 4.1.1]);除非你肯定需要libnetcdf的4.2版本,否则你可能想试试这个。