使用conda安装bowtie2遇到undefined symbol报错
/public/home/xuzhougeng/miniconda3/envs/bsseq/bin/bowtie2-build-s: symbol lookup error: /public/home/xuzhougeng/miniconda3/envs/bsseq/bin/bowtie2-build-s/public/home/xuzhougeng/miniconda3/envs/bsseq/bin/bowtie2-build-s: undefined symbol: _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv
: symbol lookup error: /public/home/xuzhougeng/miniconda3/envs/bsseq/bin/bowtie2-build-s: undefined symbol: _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv
直接复制报错信息进行谷歌检索,没有找到答案。
复制_ZN3tbb10interface78internal15task_arena_base19internal_initializeEv
进行检索,定位到这个symbol由 tbb定义
使用ldd分析bowtie2-build-s的动态链接,发现libtbb的静态链接是对应的是系统的libtbb
切换到anaconda的动态库目录中,发现没有libtbb.so.2
因此最容易想到的解决方案就是
ln -s libtbb.so.12 libtbb.so.2
但是依然会报错。因为出现undefined symbol的根本原因是,tbb有bioconda, main, conda-forge三个版本,conda-forge是最新的结果,而我安装bowtie2用的就是最新的conda-forge, 而非bowtie2构建时候用的bioconda版本。如果我系统没有自带tbb,那么报错就是 symbol not found, 而非undefined symbol。因此真正的解决方法是卸载tbb和bowtie2,重新安装(确保bioconda是最高优先级)
conda install -c bioconda bowtie2