2015-11-04 64 views
1

我不再能够从源代码编译R软件包,而且这在今天之前从未成为问题。这是发生了什么:在ubuntu上编译R软件包,无效的ELF头文件

R CMD build BAMMtools 
* checking for file ‘BAMMtools/DESCRIPTION’ ... OK 
* preparing ‘BAMMtools’: 
* checking DESCRIPTION meta-information ... OK 
* cleaning src 
* checking for LF line-endings in source and make files 
* checking for empty or unneeded directories 
* looking to see if a ‘data/datalist’ file should be added 
* building ‘BAMMtools_2.1.0.tar.gz’ 


R CMD INSTALL BAMMtools 
* installing to library ‘/usr/local/lib/R/site-library’ 
* installing *source* package ‘BAMMtools’ ... 
** libs 
make: Nothing to be done for 'all'. 
installing to /usr/local/lib/R/site-library/BAMMtools/libs 
** R 
** data 
** inst 
** 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 '/usr/local/lib/R/site-library/BAMMtools/libs/BAMMtools.so': 
    /usr/local/lib/R/site-library/BAMMtools/libs/BAMMtools.so: invalid ELF header 
Error: loading failed 
Execution halted 
ERROR: loading failed 
* removing ‘/usr/local/lib/R/site-library/BAMMtools’ 
* restoring previous ‘/usr/local/lib/R/site-library/BAMMtools’ 

这似乎并不符合该R包特别是一个问题,因为我能够从R内安装的软件包,如:

> install.packages('BAMMtools_2.1.0.tar.gz', repos=NULL) 
Installing package into ‘/usr/local/lib/R/site-library’ 
(as ‘lib’ is unspecified) 
* installing *source* package ‘BAMMtools’ ... 
** libs 
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c cohort_matrix.c -o cohort_matrix.o 
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c dtrates.c -o dtrates.o 
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c jenksBrks.c -o jenksBrks.o 
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c treetraverse.c -o treetraverse.o 
gcc -std=gnu99 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o BAMMtools.so cohort_matrix.o dtrates.o jenksBrks.o treetraverse.o -L/usr/lib/R/lib -lR 
installing to /usr/local/lib/R/site-library/BAMMtools/libs 
** R 
** data 
** inst 
** preparing package for lazy loading 
** help 
*** installing help indices 
** building package indices 
** testing if installed package can be loaded 
* DONE (BAMMtools) 

我在Ubuntu v15.10下运行R v3.2.2,很狡猾。我无法想象在过去24小时内我所做的任何事情都会产生这种效果,除了使用sudo apt-get update/upgrade更新系统。

尽管这对安装软件包没有太大的问题,但是我也无法运行R CMD检查命令,这对于开发来说是一个问题。

任何建议或意见将不胜感激!谢谢!

+2

半正式推荐的方式确实是'R CMD INSTALL'这个'.tar.gz'文件,而不是源目录。我通过不安装'.tar.gz'读过其他人遇到的问题,并且看到R核心人员说在目录上调用INSTALL不受支持。尽管“lib和pkgs的元素可能是目录的绝对路径或相对路径名,pkgs也可能包含程序包归档文件的名称:然后这些文件会被提取到临时目录中。”从https://stat.ethz.ch/R-manual/R-devel/library/utils/html/INSTALL.html –

+0

您是对的:如果IR CMD编译并将该程序包移至其他目录,然后将R CMD安装,它工作正常。显然,源代码目录的存在是一个问题,虽然它不曾是...谢谢! – Pascal

+1

杰克是正确的,它不仅仅是_semi-official_:它已经是推荐多年的唯一方法。 –

回答

1

正如在问题的评论中发现的那样,感谢Jack Wasey,问题仅仅在于我在源目录的名称上运行了R CMD INSTALL,而不是在构建的.tar.gz文件上运行。