libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found 的应对策略(没错libstdc++.so.6又又又坏了)

        好久没有用qiime2了,今天看了qiime2 sidle插件的使用说明,想用这个插件尝试一下5R 16S,但是报错了:

qiime sidle trim-dada2-posthoc \
 --i-table table-dada2.qza \
 --i-representative-sequences rep-seqs-dada2.qza \
 --p-trim-length 100 \
 --o-trimmed-table table-dada2-100nt.qza \
 --o-trimmed-representative-sequences rep-seq-dada2-100nt.qza


# 前面还有一堆,但是不重要,下面是主要报错内容:

ImportError: /home/dell/miniconda3/envs/qiime2-2021.8/lib/python3.8/site-packages/pandas/_libs/window/../../../../../libstdc++.so.6: version `GLIBCXX_3.4.26' not found 
(required by /home/dell/miniconda3/envs/qiime2-2021.8/lib/python3.8/site-packages/scipy/optimize/_group_columns.cpython-38-x86_64-linux-gnu.so)

There was a problem loading table-dada2.qza as a QIIME 2 Result:

/home/dell/miniconda3/envs/qiime2-2021.8/lib/python3.8/site-packages/pandas/_libs/window/../../../../../libstdc++.so.6: version `GLIBCXX_3.4.26' not found 
(required by /home/dell/miniconda3/envs/qiime2-2021.8/lib/python3.8/site-packages/scipy/optimize/_group_columns.cpython-38-x86_64-linux-gnu.so)

See above for debug info.

# libstdc++.so.6 的问题

libstdc++.so.6: version `GLIBCXX_3.4.26' not found ,这是主要原因,于是去百度了一下,又是软连接又是修动态的库,把我一个小白整的很懵,大致的意思我懂了,于是尝试了一下:

1. 首先使用find命令查了一下libstdc++.so.6的位置:

$ find / -name libstdc++.so.6
/home/dell/miniconda3/lib/libstdc++.so.6
/home/dell/miniconda3/envs/qiime1/lib/libstdc++.so.6
/home/dell/miniconda3/envs/mpa/lib/libstdc++.so.6
/home/dell/miniconda3/envs/metage/lib/libstdc++.so.6
/home/dell/miniconda3/envs/qiime2-2021.8/lib/libstdc++.so.6
/home/dell/miniconda3/envs/qiime2-2021.8/x86_64-conda-linux-gnu/lib/libstdc++.so.6
/home/dell/miniconda3/envs/assembler/lib/libstdc++.so.6
/home/dell/miniconda3/envs/lefse/lib/libstdc++.so.6
/home/dell/miniconda3/envs/ame/lib/libstdc++.so.6
/home/dell/miniconda3/pkgs/libstdcxx-ng-11.1.0-h56837e0_8/lib/libstdc++.so.6
/home/dell/miniconda3/pkgs/libstdcxx-ng-11.2.0-he4da1e4_15/lib/libstdc++.so.6
/home/dell/miniconda3/pkgs/libstdcxx-ng-9.3.0-hd4cf53a_17/lib/libstdc++.so.6
/home/dell/miniconda3/pkgs/aspera-cli-3.9.6-h5e1937b_0/lib/libstdc++.so.6
/home/dell/miniconda3/pkgs/gcc_impl_linux-64-9.4.0-h03d3576_14/x86_64-conda-linux-gnu/lib/libstdc++.so.6
/home/dell/miniconda3/pkgs/libstdcxx-ng-11.2.0-he4da1e4_14/lib/libstdc++.so.6
/home/user/miniconda3/lib/libstdc++.so.6
/home/user/miniconda3/pkgs/libstdcxx-ng-9.3.0-hd4cf53a_17/lib/libstdc++.so.6
find: ‘/home/lb/.config/pulse’: Permission denied
find: ‘/home/lb/.local/share/rstudio/sessions/active/session-18768f94/viewer-cache’: Permission denied
find: ‘/home/lb/.local/share/gvfs-metadata’: Permission denied
find: ‘/home/fuqz/.config/ibus’: Permission denied
find: ‘/home/fuqz/.config/gnome-session’: Permission denied
find: ‘/home/fuqz/.config/evolution’: Permission denied
find: ‘/home/fuqz/.config/gtk-3.0’: Permission denied
find: ‘/home/fuqz/.config/pulse’: Permission denied
find: ‘/home/fuqz/.config/dconf’: Permission denied

有很多位置有这个文件,但是我没有sudo密码,也不想麻烦我们的管理员,于是对着自己(用户名为dell)的其它环境的libstdc++.so.6开刀,看看他们有没有 GLIBCXX_3.4.26 ,有的话就copy过来。

2. 查看一下报错环境位置的libstdc++.so.6情况:

strings /home/dell/miniconda3/envs/qiime2-2021.8/lib/python3.8/site-packages/pandas/_libs/window/../../../../../libstdc++.so.6 | grep GLIBC


......

# 前面还有一堆,不过重要的是下面的:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2

# 果然我的qiime2-2021.8报错就是因为 GLIBCXX 只到3.4.21,更别提26了,后面的都没了(具体原因不详)

3. 只要找其他环境中的 libstdc++.so.6文件,如果有GLIBCXX_3.4.26,将其拷贝到报错位置,替换掉报错文件就行了,我随便选了一个conda环境(大家根据自己的情况,挨个看看总会有的):

# 我选了自己的另一个conda环境(环境名为metage),看看它的/libstdc++.so.6是否有更高的版本

strings /home/dell/miniconda3/envs/metage/lib/libstdc++.so.6 | grep GLIBC

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.6
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
__strtof_l@GLIBC_2.2.5
symlink@GLIBC_2.2.5

......

# 这个环境里的很合适,有libstdc++.so.6: version `GLIBCXX_3.4.26' ,甚至还有GLIBCXX_3.4.29,就是你了!

然后只需要cd到报错位置,将libstdc++.so.6删除,将metage环境下指定位置(指定位置是通过前面的find命令找的,一般在 ~/miniconda3/envs/环境名/lib/ 下就有)的libstdc++.so.6拷贝过来就行了;

# 删除报错位置的libstdc++.so.6文件:
rm -rf /home/dell/miniconda3/envs/qiime2-2021.8/lib/python3.8/site-packages/pandas/_libs/window/../../../../../libstdc++.so.6

# cd 到报错位置
cd /home/dell/miniconda3/envs/qiime2-2021.8/lib/python3.8/site-packages/pandas/_libs/window/../../../../../

# 将版本更高的libstdc++.so.6文件拷贝到当前文件夹(即报错位置):
cp /home/dell/miniconda3/envs/metage/lib/libstdc++.so.6 ./

# 查看报错位置的libstdc++.so.6 :
 strings /home/dell/miniconda3/envs/qiime2-2021.8/lib/python3.8/site-packages/pandas/_libs/window/../../../../../libstdc++.so.6 | grep GLIBC

# 会出现以下内容,发现有我需要的GLIBCXX_3.4.26,ok
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.6
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
__strtof_l@GLIBC_2.2.5
symlink@GLIBC_2.2.5

......

最后运行报错的qiime2程序,发现没有报错正常出了结果,ok解决。

qiime sidle trim-dada2-posthoc \
 --i-table table-dada2.qza \
 --i-representative-sequences rep-seqs-dada2.qza \
 --p-trim-length 100 \
 --o-trimmed-table table-dada2-100nt.qza \
 --o-trimmed-representative-sequences rep-seq-dada2-100nt.qza

Saved FeatureTable[Frequency] to: table-dada2-100nt.qza
Saved FeatureData[Sequence] to: rep-seq-dada2-100nt.qza

总结一下,遇到这种 /libstdc++.so.6: version `GLIBCXX_3.4.26' not found 报错,其实很简单,就是删除报错位置的libstdc++.so.6文件,将别的环境位置的libstdc++.so.6 拷贝过来就可以了。不过仅限conda环境软件的报错,别的情况没有研究,不敢保证普适性,有不对的地方麻烦大家指正,希望对大家有帮助!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值