||
最近安装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
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 22:54
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社