installation of package ‘ ‘ had non-zero exit status

一、问题背景

在配置SCENIC时运行下列代码,出现报错。

注:Linux服务器,Rstudio server

BiocManager::install(c("AUCell", "RcisTarget"),ask = F,update = F) 



二、情况描述

自动下载依赖包阶段正常,所有依赖包都成功下载。

尝试安装sys包时出错,可以正常解压,但是无法安装,显示如下,后续所有包的安装出现相同错误。根据“/bin/sh: 1: x86_64-linux-gnu-gcc: not found”这一提示找到【夜神兔】的解决方案,链接如下:(14条消息) /bin/sh: 1: x86_64-linux-gnu-gcc: not found_夜神兔的博客-CSDN博客

所以根本原因在于没有安装gcc编译器[1]。

操作中的顾虑是师兄之前提到用conda管理所有环境,不能用apt。本人对这两个包管理的方法不是很熟悉,改天详细理一理这两者之间的问题。 

在Linux终端执行下列代码,采用apt配置gcc等环境

sudo apt update
sudo apt install build-essential

在终端输入下列代码查找g++、gcc、c++的情况(因为重启R之后仍然出现原先的问题),可找到对应文件,输出如下图

find ~ -name "x86_64-conda-linux-gnu-g++"
find ~ -name "x86_64-conda-linux-gnu-c++"
find ~ -name "x86_64-conda-linux-gnu-gcc"

 至此需要重新启动Rstudio,师兄的说法如下:

ps aux | grep rserver | grep -v "grep rserver" | awk '{print $2}' | xargs kill -9
sudo rstudio-server restart

尝试之后的结果是,包是可以安装了,但是Rstudio上R的版本掉到了3.6.(欸先凑活着用吧,过几天再试试把它升回去)

更改Rstudiosever中R版本的问题,可以再xftp中找到rstudioserver的配置文件(位置在/etc/rstudio/rserver.conf),直接添加rsession-which-r变量

rsession-which-r=R新版本的位置

错误的循环:最终又以仅有gnu-cc:not found的形式出现了(没有了c++,g++&gcc的报错)

检查:发现c++,g++,gcc和cc的代码都是在相同的位置,没有差别。问题应该出Rstudio还没有找到这几个编译器,所以采用的方法是将编译器所在的位置添加到路径之中,这里采用的是stackoverflow上解决办法[2]:​​​​​Unable to compile R packages in Ubuntu Conda environment: x86_64-conda-linux-gnu-c++: not found - Stack Overflow

经过检验,部分包可以安装了,但是仍然会有出现报错的情况,如下:

尝试重新安装第一个无法安装的包,可见如下报错:

 在这种情况下还是得耐心点慢慢看

Q1:前三行的内容?

Found pkg-config cflags and libs!
Using PKG_CFLAGS=-I/usr/include/x86_64-linux-gnu
Using PKG_LIBS=-lcurl

  “在用第三方库的时候,经常会用到pkg-config这个东西来编译程序”[3]

  “使用pkg-config时,选项--cflags 它是用来指定程序在编译时所需要头文件所在的目录;选项 --libs则是指定程序在链接时所需要的动态链接库的目录。”[4]

    而libcurl是一个跨平台的开源网络协议库[5],也就是一个第三方库,结合上面的信息也就Make sense了。

    尝试使用下列命令安装,显示已经存在(注:libcurl4-openssl-dev不是包,是一个linux 库)

sudo apt-get install libcurl4-openssl-dev

    上述情况说明libcurl4-openssl-dev已经存在了,所以是路径的问题。

    注:本次提及的问题在stackoverflow上有完全相同的问题:r - 配置失败,因为找不到 libcurl - 堆栈溢出 (stackoverflow.com)

     但是上面提到的都是本地编译,可以尝试使用conda安装libcurl,代码如下:

conda install libcurl

     而后查看环境变量

echo $PKG_CONFIG_PATH
echo $PATH

        发现PKG_CONFIG_PATH为空,没有libcurl.pc文件;并且pkg-config不在path中。

     该链接可以解决部分问题,可以通过这个方式安装curl,但是后来仍然有十几个包安装不了。

分享一个装 R 包出错案例 - 简书 (jianshu.com)

    最终的解决方案是用动态链接将缺失的库拉过去,但是仍存在个别无法本地编译的包。建议用conda进行包的管理。

     

四、总结

[1]GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)

[2]stackoverflow上另一个回答也是有参考意义的,可以对照着看看。链接如下:

conda - rstudio-server error: /bin/sh: x86_64-conda_cos6-linux-gnu-cc: 命令未找到 - Stack Overflow

[3]pkg-config原理及用法 - stardsd - 博客园 (cnblogs.com)

[4](16条消息) pkg-config --cflags --libs_rtoax的博客-CSDN博客

[5](16条消息) libcurl 使用方法简介_wusc'blog的博客-CSDN博客_libcurl

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值