libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found 的应对策略(没错libstdc++.so.6又又又坏了)_生信浪客的博客-程序员宅基地

技术标签: 生物信息学  linux  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_52602016/article/details/124478222

智能推荐

Doc批量转成Docx_c++ doc转docx-程序员宅基地

Doc批量转成Docx在工作中遇到需要将word文档中的doc转换成docx的需求,一共有大几百个文件,这种就不太可能一个个去转换了,文件太多效率太低了。VBA环境经过一顿查找之后确定使用Office的VBA(Microsoft Visual Basic for Applications)去做相应转换,它是Office自带的,一般不需要额外安装,转换之后兼容性也比较好。VBA环境开启步骤:打开任意一个word文档,Office版本按下Alt+F11快捷键即可看到VBA的编译环境语法这里需要_c++ doc转docx

Java中break,continue,return的用法_java continue和break和return正确的是_胖阿全的博客-程序员宅基地

JAVA中break,continue,return的用法1.break用于中断break所在的循环,执行后续语句2.continue用于中断本次循环,进入下一次循环,不会执行本次循环中continue之后的语句3.加上标识符aa:中断循环,返回aa处4.return用于中断方法的执行,立即返回调用处,不会执行当前方法中后续的所有操作。break中断public class Test {public static void main(String[] args) {for(int i=1;i_java continue和break和return正确的是

C++ 开发SOAP服务端和SOAP客户端_soap开源cpp client-程序员宅基地

C++ 开发SOAP服务端和SOAP客户端作者:flyfish 2012-5-12目的:利用gSOAP自带的Calc例子 仿写一个 网络中使用计算器客户端通过http发送xml格式的数据请求,服务端计算完之后,将结果以xml格式返回给客户端。编写之后 我们的服务端可独立使用。像在安装了IIS或者用Apache配置的Web服务器。gSoap版本 2.8.8 编译环境为_soap开源cpp client

qss设置平面按钮_Qt5.9中QSS(qt Style Sheet)用法之一设置按钮颜色和背景色(设置按钮间相互间隔、设置按钮与周围边缘间隔)..._杨真直的博客-程序员宅基地

本博客主要总结用QSS(qt Style Sheet/qt样式表)来设置QPushButton的背景色和字体颜色用法。在Qt中,常用控件都可以用QSS来设置颜色和背景,下面本文将举一个实例,示范QSS用法。本文实例的主要内容是,设置两个pushbutton按钮的字体颜色和背景色。同时,本文也总结了利用布局管理器,设置两个按钮跟上下空间距离,以及两个按钮相互之间距离,具体的实例如下代码所示:小结::..._qss 按钮样式

论文常用词汇i.e.,e.g.,etc.,viz.,et al.的前世今生 薛动谔的喵-程序员宅基地

转载:https://zhuanlan.zhihu.com/p/63640148前言:今天写英文论文,刚好用到that is to say(也就是说),突然想起平时阅读文献时的表达方式i.e.,就想着查一下它的词源,一查之下,才知道i.e.是拉丁文的缩写,原词为拉丁语id est。而且,无独有偶,像平时文献中遇到的e.g.,etc.,viz.,et al.等『注意是缩写,有.号』,也都是拉...

机器学习(3)——无监督学习_Fo*(Bi)的博客-程序员宅基地

什么是无监督学习?顾名思义,无监督学习就是不受监督的学习。同监督学习建立在人类标注数据的基础上不同,无监督学习不需要人类进行数据标注,而是通过模型不断地自我认知、自我巩固,最后进行自我归纳来实现其学习过程。虽然目前无监督学习的使用不如监督学习广泛,但这种独特的方法论为机器学习的未来发展方向给出了很多启发和可能性,正在引起越来越多的关注。2015年,深度学习“三巨头”——YannLeCun、Yoshua Bengio、Geoffrey Hinton首次合作在Nature上撰文,在对深度学习未来展望写道:“无

随便推点

Binder相关面试总结(五):为什么Activity间传递对象需要序列化_binder数据为什么需要序列化-程序员宅基地

前言我们都知道进行Android 开发的时候,跳转到Activity和Fragment的时候,传递对象是通过Intent或者bundle 进行传递。当这个对象没有实现序列化的时候 当你通过Inetnt传递的时候会报红,系统会提示你将这个对象实现序列化。不同 Activity 之间传输数据可以通过 Intent 对象的 putExtra 方法传递,对于 java 的八大基本数据类型(char int float double long short boolean byte)传递是没有问题的,但是如果传递比_binder数据为什么需要序列化

vr视频六面体变换-程序员宅基地

本文会对facebook的开源filter:vf_transform.c 做代码级分析,解释vr视频是如何做六面体转换的。转换的关键其实就是输入vr视频到六面体的映射(也就是下图中蓝色图像映射到红色图像):假设每个正方形的像素是512x512个,那么对于(x, y)这个像素值来说,想得到这个值,我只需要从原点,拉一条直线连接到(x, y)并沿着这条直线一直打到球面上,得到的像素值就

测量设备自动化-AK协议-程序员宅基地

1.AK协议定义AK协议是控制器和测量设备之间通信的方式,广泛应用于整车耐久转毂等测试中,如AVL VECON。人们通常都是用VECON界面设置试验曲线,但通过AK可以实现设备的自动化。如下图所示:集合INCA和AK,实现了闭环控制,可用于重复的试验,如失火等。关于AK协议的文档不多,本文收集了一些,回复”AK文档“获取。更多需要参考设备文档。2.AK报文格式按字节顺序..._ak协议mcu要配置成什么性质

字符串大小的比较_字符串如何比较大小-程序员宅基地

字符串大小比较的步骤:从左至右一位一位比较,如果相同,则继续下一位,如果不同,则谁的ASCII大谁的字符串就大如果比较到其中一者已经结束了,还没有分出大小,则长度长的字符串大..._字符串如何比较大小

宏的编写技巧_写宏-程序员宅基地

宏的编写技巧声明:整理来自开源项目json-tutoriallink.有些同学可能不了解 EXPECT_EQ_BASE 宏的编写技巧,简单说明一下。反斜线代表该行未结束,会串接下一行。而如果宏里有多过一个语句(statement),就需要用 do { /…/ } while(0) 包裹成单个语句,否则会有如下的问题:只用 { } 也不行:用 do while 就行了:..._写宏

11--黑马程序员--技术总结之字符串-程序员宅基地

一.基本概念 字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为s=“a1a2···an”(n>=0)。它是编程语言中表示文本的数据类型。 Java使用java.lang包中的String类来创建一个字符串变量,因此字符串变量是一个对象。 1.字符串常量 如,“你好”,“1234.987”,“weqweo”

推荐文章

热门文章

相关标签