原创

terra包加载报错解决

温馨提示:
本文最后更新于 2022年08月02日,已超过 639 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

背景

最近要分析单细胞转录组学数据,使用monocle3包前需要安装一些依赖,其中包含terra包,使用conda环境安装后,加载时报错。

library(terra)

unable to load shared object '/share/Software/miniconda3/envs/r4-base/lib/R/library/terra/libs/terra.so':

  /lib64/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /share/Software/miniconda3/envs/r4-base/lib/R/library/terra/libs/../../../../libgdal.so.31)

解决方案

1.

在网上搜索很多网页都是解决这个软连接的问题,但是尽管换好了,但是还是报相同的错误,最后通过conda环境安装了gcc12版本,解决了这个error。

conda install -c conda-forge gcc=12.1.0

2.

再加载terra,报新的错误:

unable to load shared object '/share/Software/miniconda3/envs/r4-base/lib/R/library/terra/libs/terra.so':

  /lib64/libz.so.1: version `ZLIB_1.2.9' not found (required by /share/Software/miniconda3/envs/r4-base/lib/R/library/terra/libs/../../../.././libpng16.so.16)

这个时候就用到前面替换软连接的方案了,先去编译安装zlib对应版本,再去安装路径中lib中找到对应libz.so.1.2.9链接去需要的路径,代码如下。

cp /share/Software/zlib-1.2.9/libz.so.1.2.9 /lib64

rm /lib64/libz.so.1

ln -s /lib64/libz.so.1.2.9 /lib64/libz.so.1

3.

再加载terra,问题依旧未解决,这个时候我检查了链接支持的zlib版本

strings /lib64/libz.so.1 | grep ZLIB

是存在`ZLIB_1.2.9'的,我再conda命令行直接敲了R,运行进去可以加载terra,但是前面不能通过rstudio-server加载。退出rstudio-server重新进去,又可以加载了。

初步认为是因为rstudio-server在这一步未及时更新到软连接,在我命令行运行R后,相当于提醒他更新了软连接。再重新登录rstudio-server就可以检测到了。

这个原因或许也是前一步GLIBCXX_3.4.30软链接更新完没有作用的源头。(此处为猜测,待检验,如果有人测试ok,可以在评论区留言哈,谢谢。)

再加载terra,报新的错误:

/share/Software/miniconda3/envs/r4-base/lib/R/library/terra/libs/../../../../libgdal.so.31: undefined symbol: sqlite3_column_table_name

这一块是sqlite的编译问题,重新下载编译,代码如下

wget https://www.sqlite.org/2022/sqlite-autoconf-3390200.tar.gz

tar -xvf sqlite-autoconf-3390200.tar.gz

cd sqlite-autoconf-3390200/

vim sqlite3.c

#define SQLITE_CORE 1

#define SQLITE_AMALGAMATION 1

#ifndef SQLITE_PRIVATE

# define SQLITE_PRIVATE static

#endif

#define SQLITE_ENABLE_COLUMN_METADATA 1        //注意这行,需要添加,保存后退出

./configure

make

make install

再加载terra,一个小提醒,不算报错,但也是直接安装个R包codetools就解决了。至此,terra终于成功加载上了。

code for methods in class “Rcpp_SpatVectorProxy” was not checked for suspicious field assignments (recommended package ‘codetools’ not available?)

总之来说,一波三折,分享给大家。

正文到此结束
本文目录