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



我使用以下命令在 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

搜索堆栈溢出时,我在这里找到了答案:如何使用 --enable-R-shlib 配置 R-3.0.1这表明问题是我试图在我之前编译的目录中编译,没有"--enable-R-shlib"选项

我试图使用命令解决问题

make 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 而言现在有什么区别,但惯例是它应该将构建目录返回到预配置、预构建状态。

通常,您还不想在包含 R 源的目录中构建(./configure建议您正在这样做)。

make clean

要走的路;在这里补充一些进一步的澄清正在发生的事情。

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

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

但是,这些.o文件是在不同的配置下编译的,因此从这个意义上说,它们是"过时的"——make clean删除了那些.o文件(以及早期版本中现已过时的任何其他工件)。

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

最新更新