最近工作需要用到cnvnator,之前只在centos下安装使用过cnvnator,现在换成了Ubuntu系统,安装编译cnvnator遇到了一列的坑,只想说cnvnator不愧是拷贝数变异检测界最难安装软件!在调试过程中查了很多资料,感谢有大家分享经验才得以调试安装成功,尤其是这两篇文章,很有帮助,CNVnator安装使用说明 - 简书 (jianshu.com),https://bbs.huaweicloud.com/forum/thread-37696-1-1.html。按照上述流程,我编译过程中还是遇到的一些报错,现在将我的解决经验与大家共享。
(一)环境要求
我的是ubuntu16.4 ,gcc是5.4。可以用 cat /proc/version查看Ubuntu和gcc版本信息,这个信息用于选root版本,网上有人说需要选择与gcc相匹配的root包,我用的与gcc版本不同的包也安装成功了,当然尽量版本信息一致,可以减少出问题的几率。
(二)依赖包的要求
CNVnator的安装依赖于samtools和root包,samtools选择的samtools1.1.0,我尝试过samtools1.2,报错信息要比samtools1.1.0多,所以最终选用的samtools-1.10,可以在SAMtools/BCFtools/HTSlib - Downloads官网下载。
1.samtools安装
下载好samtools-1.10.tar.bz2文件后,解压缩
tar -xvf samtools-1.10.tar.bz2
cd samtools-1.10
./configure --prefix=/path/to/samtools ###prefix后面添加samtools安装目标路径
make all all-htslib && make install-htslib
将samtools添加到环境变量中
export PATH=/path/to/samtools/bin:$PATH
export LD_LIBRARY_PATH=/path/to/samtools/lib:$LD_LIBRARY_PATH
2. root 安装
root的官网上(https://root.cern/)提供了编译好的root包,解压以后直接可以用,选择与gcc相对应的版本就可以,我用的root 6.16,也可以用6.18-gcc5.4这个,这是下载链接 Release 61800 - ROOT
下载了gz文件后
用tar -xvf解压得到root文件包,就可以了
将root添加到环境变量中,这一步一定要做!!!不然后面会报很多错误
export PATH=/path/to/SOURCE/root/bin:$PATH
export LD_LIBRARY_PATH=/path/to/SOURCE/root/lib:$LD_LIBRARY_PATH
(三)CNVnator编译和安装
前面两步安装基本没啥问题,这一步是报错最多、调试最久的。
1 下载CNVnator0.4.1安装包
网址:https://github.com/abyzovlab/CNVnator
2 解压缩
unzip CNVnator_v0.4.1.zip
3 建立软连接
cd CNVnator_v0.4.1/src ####进入CNVnator文件夹下的src文件夹
ln -s /path/to/samtools samtools ####这里的path/to/samtools是你从官网下载下来后编译过的samtools文件夹,不是你安装目标文件夹,这个一定不要搞错,比如我下载了 samtools-1.10.tar.bz2后,我是在/analysis目录下解压得到的samtools-1.10,那么我的path/to/samtools就是/analysis/samtools-1.10
ln -s /path/to/root root_build ####这里的path/to/root是你解压root的gz文件后,所得root文件夹所在目录
make
(四)错误调试
错误一 gcc编译时出现DSO missing from command line
这和上面引用文章里遇到的问题一样的,我的错误信息覆盖掉了,引用一下他的来说明一下。
/usr/bin/ld: samtools/htslib-1.9/libhts.a(hfile_s3.o): undefined reference to symbol 'HMAC@@libcrypto.so.10'
//usr/lib64/libcrypto.so.10: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [cnvnator] Error 1
出现这个问题 ,通常是由于gcc指令没有引入正确的库导致的,DSO missing from command line这句提示前会有库名,根据库名,在gcc后面加上-lcrypto,具体解决方法为:
原指令: gcc XXXXX
新指令:gcc XXXXX -lcrypto
也就是说在指令的末尾加上缺失的库,也可以执行make命令时,使用以下命令:
make LIBS="-lcrypto"
错误二 出现ld:cannot find -lcrypto
查了很多资料,都说是ubuntu没有安装libz的库,如果确实没安装,可以用apt install zlib1g安装,但是我安装过,后来发现是anaconda2没识别apt install方式安装的包,我把环境变量更改了一下,将/usr/bin放在最前面,用/usr/bin/下的ld,就没有报这个错误了。具体操作如下:
export PATH=/usr/bin/:$PATH
错误三:出现dynsym local symbol at index 2 ;libdeflate库里的函数都不识别
(1)出现dynsym local symbol at index 2,采用如下方法解决,参考Ubuntu下编译Qt项目出现libQt5WebEngineCore.so报错 – 可可知秋 (cocozq.com)
sudo ln -sf /usr/bin/x86_64-linux-gnu-ld.gold /usr/bin/ld
(2)undefined reference to "libdeflate_crc32" "libdeflate_freee_decompressor"
这个问题花了最久的时间,最后是通过在gcc后面加-ldeflate解决的
网友评论