我使用以下命令在 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
文件不够后,我放弃了)。