李雷廷的个人博客分享 http://blog.sciencenet.cn/u/llt001

博文

安装SAMtools,Bedtools等出现gzopen函数未定义的问题

已有 8131 次阅读 2014-11-12 11:37 |个人分类:方法总结|系统分类:科研笔记

最近安装Bedtools,总是出现如下错误:

- Building main bedtools binary.

   obj/gzstream.o: In function gzstreambuf::open(char const*, int):

   gzstream.C:(.text+0x2a5): undefined reference to gzopen64'

   collect2: ld returned 1 exit status

   make: *** [all] Error 1

于是,开始在网上搜索解决方法。

因为这一错误经常出现,该问题也列到了Bedtools的FAQ文档中,其说明的解决方法是重新安装libz和libz-devel。也就是Debian/Ubuntu 系统执行命令

apt-get install zlib    apt-get install zlib1g-dev

或者Fedora/Centos系统执行命令

yum install zlib    yum install zlib1g-dev

但是,当我按此方法重新安装后并没有解决问题。

接着就是各种论坛上给出的解放方案,一般是说在Makefile文件中修改LIBS变量,以指定libz的路径

但是当我修改了此变量为(系统中libz.so.1在/lib64文件夹下)

export LIBS = /lib64/libz.so.1.2.3

时,问题还是没有解决。


然后终于看到一个帖子先利用objdump查看.so文件的函数地址,先安装最新版本的libz,再修改符号链接到新版本的libz,问题才得以解决。


查询.so文件中的函数地址的命令:

objdump -T /lib64/libz.so.1.2.3 | grep gzopen64

搜索系统中库文件的命令

locate libz.so

修改符号链接的命令:

sudo ln -sf /usr/local/lib/libz.so.1.2.8 /lib64/libz.so


总结:前面官方文档和一些论坛虽然给出了解决方法,但怎奈不甚理解这些方法的原理,而一些系统中就总是不能解决。而后来博客中出的解决方案有一个明确解决问题的思路,先确定gzopen64是否存在,再更新链接,使该函数可被调用。


参考资料:

https://bedtools.readthedocs.org/en/latest/content/faq.html

http://seqanswers.com/forums/archive/index.php/t-9708.html

http://xqxia.blog.sohu.com/260954395.html

 



https://blog.sciencenet.cn/blog-656335-842862.html

上一篇:GNU datamash
下一篇:慎重使用root权限
收藏 IP: 218.2.227.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的精选博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-26 04:55

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部