Kraken2 安装与编译归纳总结
到了安装环节,很多新手容易踩坑。其实 Kraken2 的编译没那么复杂,但几个关键点没注意到,回头排查起来真挺折腾的。今天我就把自己从踩坑到顺手的过程掰开揉碎讲给你听。
环境准备与依赖检查
先说系统环境。Kraken2 官方支持 Linux 和 macOS,Windows 用户得借 WSL 或 Docker。我个人的习惯是先确认几样东西:
- 编译器:g++ 或 clang++,C++11 标准以上
- CMake:3.10 或更高版本
- GNU Make 或 Ninja
- zlib:处理压缩序列文件需要
你可以用下面这条命令一口气查清楚:
g++ --version && cmake --version && make --version && dpkg -l | grep zlib1g-dev
记得把 dpkg 换成本身的包管理器——我在 CentOS 上吃过亏,用的 yum,结果缺了 zlib-devel,编译到一半卡住。嗯,提前看一眼总没错。
源码编译步骤
我建议直接从 GitHub 拉源码,保持最新。官网那个 tarball 有时滞后。下面是我平时用的步骤:
git clone https://github.com/DerrickWood/kraken2.git
cd kraken2
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
这里面几个参数我说一下:
- -DCMAKE_INSTALL_PREFIX:指定安装路径,不设的话默认放到 /usr/local
- -j$(nproc):用满所有 CPU 核心,编译速度快不少
- 如果 CMake 找不到 zlib,可以手动指定:
-DZLIB_ROOT=/path/to/zlib
为什么强调 CMake 参数?我遇到过几次因为路径问题导致链接失败的案例。说白了,CMake 的查找逻辑有时不按你想象来,尤其是你系统里装了多套库的时候。
常见编译错误与解决
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
| zlib.h: No such file or directory | zlib 开发包未安装 | apt install zlib1g-dev / yum install zlib-devel |
| Could NOT find CURL | 不需要的依赖?别慌 | Kraken2 本不需要 cURL,若报此错,请检查 CMakeLists.txt 是否被修改 |
| c++: internal compiler error | 编译器 bug 或内存不足 | 减少 -j 并发数,或升级 gcc |
| /usr/bin/ld: cannot find -lstdc++ | g++ 未正确安装 | 重新安装 build-essential / Xcode Command Line Tools |
我曾经在 Ubuntu 18.04 上遇到过 zlib 版本太老的问题——就是编译链接时报了一堆符号未定义。换了个新版本的 zlib 源码,手动编译再链接,顺利过了。
安装验证
装完后跑个简单测试:
kraken2 --version
kraken2-build --version
如果显示版本号,那基本稳了。要是报“command not found”,检查一下安装路径是否在 PATH 里。我习惯把 /usr/local/bin 加在 .bashrc 的末尾:
export PATH="/usr/local/bin:$PATH"
然后 source 一下,再试。还有个小技巧:用 which kraken2 看实际二进制在哪,有时你会发现系统里有另一个版本,把你新装的盖过去了。
构建数据库前的遗留问题
编译完成只是第一步。接下来要下载参考基因组和构建索引——那才是计算量的大头。不过在本章我们只聚焦安装与编译。这里提一句:Kraken2 的二进制本身很小,但它的数据库构建脚本 kraken2-build 会调用一些 Perl 脚本,所以系统里得有 Perl 和 wget。我当时漏了,结果数据库下到一半卡住,折腾了好一阵。
为了让你对整个安装流程有个直观印象,我画了张图,把关键步骤和依赖串了起来。
这张图从顶部一路往下走,每一步都有前置条件。别看步骤不多,每一步都可能翻车。你按着图里的顺序来,再对照表格里的错误解法,基本一次过。