好久没有用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环境软件的报错,别的情况没有研究,不敢保证普适性,有不对的地方麻烦大家指正,希望对大家有帮助!