运行网上现成的binary程序总是 报这么个错: snap-aligner index nt COMP_SNAP -locationSize 8 -t48

Computed bias table in 222s
Allocating memory for hash tables...terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted

似乎是个内存泄漏的错误, 然而老夫内存大大滴, 1TB, Google一番发现原来如果内存碎片过多, 即使内存够用, 也有可能出现无法分配的情况。没的说,只能重新编译咯

git clone https://github.com/amplab/snap.git
# 发现需要 g++ > 4.6 zlib 1.2.8
# 苦逼的集群系统组件都太老......

build g++ from source

看了下源码体积, 想想还是找找好心人打包好的rpm包比较现实 http://superuser.com/questions/381160/how-to-install-gcc-4-7-x-4-8-x-on-centos 然而身在天朝直连这个http://people.centos.org鸟网似乎很悲剧, 自带yum升级总是下载失败, 好吧, 只能挂代理先把需要的东西下载下来然后再传到集群然后再手动安装… http://people.centos.org/tru/devtools-1.1/6/x86_64/RPMS/ 东西都在上面的那个网址, 发动ctrl+f大法下载, 总共需要这么5个包

devtoolset-1.1-gcc-4.7.2-5.el6.x86_64.rpm
devtoolset-1.1-gcc-c4.7.2-5.el6.x86_64.rpm
devtoolset-1.1-libstdc++-devel-4.7.2-5.el6.x86_64.rpm
devtoolset-1.1-runtime-1-13.el6.noarch.rpm
scl-utils-build-20120927-2.el6_4.6.centos.x86_64.rpm

折腾完安装 yum install *.rpm 然后需要配置编译环境变量(系统默认的不敢动)

export CC=/opt/centos/devtoolset-1.1/root/usr/bin/gcc  
export CPP=/opt/centos/devtoolset-1.1/root/usr/bin/cpp
export CXX=/opt/centos/devtoolset-1.1/root/usr/bin/c++

build zlib from source

这个似乎没多大必要

wget http://zlib.net/zlib-1.2.8.tar.gz
tar xvzf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure --prefix=/prodata/ngs
make -j12 && make install

开心的make snap

make
mv snap-aligner /prodata/ngs/bin/

测试

nohup snap-aligner index nt COMP_SNAP -locationSize 8 -t48 > test.log &

扑街

Allocating memory for hash tables...terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_allocstd::bad_alloc