我使用命令
在Ubuntu上安装了R-3.1.2wget 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
会产生与我之前尝试制作时相同的错误。
你能帮我看看我哪里出错吗?
答案 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
个文件后还不够)。