如何使用--enable-R-shlib配置R-3.1.2

时间:2015-01-22 18:34:45

标签: r rstudio

我使用命令

在Ubuntu上安装了R-3.1.2
wget http://cran.r-project.org/src/base/R-3/R-3.1.2.tar.gz
tar xvfz R-3.1.2.tar.gz
cd R-3.1.2
./configure
make
sudo make install

当我尝试启动RStudio时出现错误

  

找不到R共享库(/usr/local/lib/R/lib/libR.so)。如果这是R的自定义构建,是否使用--enable-R-shlib选项构建?

所以我回去试图用

重新配置
./configure --enable-R-shlib=yes
make

但是我收到了错误

collect2: error: ld returned 1 exit status
make[3]: *** [libR.so] Error 1
make[3]: Leaving directory `/usr/local/lib/R-3.1.2/src/main'
make[2]: *** [R] Error 2
make[2]: Leaving directory `/usr/local/lib/R-3.1.2/src/main'
make[1]: *** [R] Error 1
make[1]: Leaving directory `/usr/local/lib/R-3.1.2/src'
make: *** [R] Error 1

搜索堆栈溢出时,我在这里找到了答案: How to configure R-3.0.1 with --enable-R-shlib 这表明问题是我试图在我之前编译的目录中编译而没有" - enable-R-shlib"选项

我尝试使用命令

解决问题
make uninstall

这并没有给出很多错误"没有什么可以为'uninstall'。'语句,但它确实成功卸载了R

./configure --enable-R-shlib=yes

给出错误

config.status: error: cannot find input file: `src/library/base/DESCRIPTION.in'

然后

make

会产生与我之前尝试制作时相同的错误。

你能帮我看看我哪里出错吗?

2 个答案:

答案 0 :(得分:10)

make uninstall仅撤消make install步骤,该步骤通常会根据需要将文件从编译目录复制到系统上的dir,并将二进制文件放入/usr/bin中,以便它们在路上。如果你想清理你之前编译的目录,使用make clean(或make distclean,我忘记了现在与R有什么区别但是惯例是它应该返回build dir to pre-configure,pre-build state。)。

一般来说,您也不希望在包含R源的目录中构建(./configure建议您这样做。)

答案 1 :(得分:0)

make clean是必经之路;在此处添加更多关于发生的情况的说明。

您尝试使用错误的选项来构建R(即,不使用与RStudio一起使用时需要使用--enable-R-shlib),并且在此过程中完成了R的全部或部分构建。

您的错误消息说此问题出现在./src/main中,较早的make将其中的.c文件编译到.o文件中。使用正确的选项重新make后重新运行./configure时,它会看到那些.o文件,并说“我不需要重新编译{{1 }}个文件,.c个文件已经存在”并尝试继续。

但是,这些.o文件是在不同的配置下编译的,因此它们在某种意义上是“过时的”-.o删除了这些make clean文件(以及其他任何伪像)较早的版本现在已过时)。

可能有一种更简单的方法来重置构建(.o从早期的make clean中删除了所有个构建文件,但也许只需要其中的一部分) ,但这可能取决于更早的make选项和新选项之间的区别,而且您倾向于花更多的时间进行修补,而不是仅仅进行干净的构建(个人,我删除所有./configure个文件后还不够)。