问题
artic(conda安装)对新冠三代扩增子数据进行分析,但是运行artic minion流程时,调用bcftools出错,内容如下:
bcftools: error while loading shared libraries: libgsl.so.25: cannot open shared object file: No such file or directory
资料搜索
gsl是c语言编写的与计算有关的数据库。
conda安装bcftools时,可能启用参数--enable-libgsl。但是本地服务器不存在该库,所以产生报错。摘自链接。
查看动态库:
$ ldconfig -p | grep libgsl
libgslcblas.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgslcblas.so.0
libgslcblas.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libgslcblas.so
libgsl.so.23 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgsl.so.23
libgsl.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libgsl.so
上述结果可见,动态库中只有libgsl.so.23,缺少libgsl.so.25。
解决办法
下载和安装gsl:
wget https://ftp.gnu.org/gnu/gsl/gsl-2.6.tar.gz
tar -zxvf gsl-2.6.tar.gz
cd gsl-2.6
mkdir /usr/local/bin/gsl_2.6
./configure --prefix=/usr/local/bin/gsl_2.6 # 指定安装路径
make
make install
确认安装的动态库版本:
$ cd /usr/local/bin/gsl_2.6/lib
$ ls
libgsl.a libgslcblas.la libgslcblas.so.0 libgsl.la libgsl.so.25 pkgconfig
libgslcblas.a libgslcblas.so libgslcblas.so.0.0.0 libgsl.so libgsl.so.25.0.0
配置/etc/ld.so.conf
,添加刚才安装的动态库路径:
/usr/local/bin/gsl_2.6/lib
执行命令:
$ ldconfig # 更新动态库
$ ldconfig -p | grep libgsl
libgslcblas.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgslcblas.so.0
libgslcblas.so.0 (libc6,x86-64) => /usr/local/bin/gsl_2.6/lib/libgslcblas.so.0
libgslcblas.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libgslcblas.so
libgslcblas.so (libc6,x86-64) => /usr/local/bin/gsl_2.6/lib/libgslcblas.so
libgsl.so.25 (libc6,x86-64) => /usr/local/bin/gsl_2.6/lib/libgsl.so.25
libgsl.so.23 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgsl.so.23
libgsl.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libgsl.so
libgsl.so (libc6,x86-64) => /usr/local/bin/gsl_2.6/lib/libgsl.so
补充
上述操作后,出现新的问题:
bcftools: symbol lookup error: /usr/local/bin/gsl_2.6/lib/libgsl.so.25: undefined symbol: cblas ctrmy
解决办法:libgsl.so.25链接已有的/lib/x86_64-linux-gnu/libgsl.so.23
:
sudo ln -s /lib/x86_64-linux-gnu/libgsl.so.23 /usr/local/bin/gsl_2.6/lib/libgsl.so.25 -f