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

How to configure R-3.1.2 with --enable-R-shlib

我在 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 shared library (/usr/local/lib/R/lib/libR.so) not found. If this is a custom build of R, was it built with the --enable-R-shlib option?

所以我回去尝试重新配置

./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

许多 "Nothing to be done for `uninstall'." 语句没有给出错误,但它确实成功卸载了 R

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

给出了错误

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

然后

make

这给出了与我之前尝试时相同的错误。

你能帮我看看哪里做错了吗?

make uninstall 仅撤消 make install 步骤,该步骤通常根据需要将文件从编译目录复制到系统上的目录,并将二进制文件放入 /usr/bin所以他们在路上。如果你想清理你以前编译的目录,使用 make clean(或 make distclean,我忘记了现在就 R 而言有什么区别,但惯例是它应该 return 预配置的构建目录,预构建状态。)。

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

make clean 是要走的路;在这里补充一些进一步的说明,说明正在发生的事情。

您尝试使用错误的选项构建 R(即,没有使用 --enable-R-shlib 作为与 RStudio 一起使用所需的选项),并且在此过程中完成了 R 的完整构建或部分构建。

您的错误消息说问题出现在 ./src/main,较早的 make 将那里的 .c 文件编译到 .o 文件中。当您 re-run make 在重新 ./configure-ing 使用正确的选项后,它会看到那些 .o 文件并说“我不需要 re-compile .c 个文件,.o 个文件已存在”并尝试继续。

然而,那些 .o 文件是在不同的配置下编译的,所以它们在这个意义上是“陈旧的”——make clean 删除了那些 .o 文件(以及任何早期版本的其他人工制品现已过时)。

可能有一种更简单的方法来重置您的构建(make clean 从早期的 make 中删除了 所有 个构建文件,但可能只是一些子集那些是必需的),但这可能取决于早期 ./configure 选项和新选项之间的确切区别,而且你很可能会花更多的时间来修补而不是仅仅做一个干净的构建(就个人而言,删除所有 ./src/main/*.o 文件还不够,我放弃了)。