前几天一直忙录公司招聘的事情,没有更新博客。上一篇博客我们讨论了Bundler的安装和配置,今天我们来讨论一下Bundler的编译方法。笔者主要是在Ubuntu进行下面的编译安装工作,而Windows下如果已经装了Cygywin,整个过程大同小异。
编译安装Bundler比直接安装它编译好的二进制文件繁琐的多,因为它依赖的库较多。整个过程如下所示:
一、Bundler源码包的获取
1. 到 http://phototour.cs.washington.edu/bundler/下载Bundler的源码包。Windows用户可以直接下载 bundler-v0.4-source.zip;Linux用户可以直接下载 bundler-v0.4-source.tar.gz,或直接在终端运行如下代码获取源码包:
wget http://phototour.cs.washington.edu/bundler/distr/bundler-v0.4-source.tar.gz
2. 下载完成后,解压该源码包:
tar -zxvf bundler-v0.4-source.tar.gz
二、GFortran的安装
Bundler所依赖的库中有些库是用Fortran写成的。为了编译Fortran程序,需要安装GFortran编译器。
sudo apt-get install gfortran
三、编译 / 安装依赖库
Bundler所依赖的外部库列表如下:
- LAPACK :线性代数计算库
- BLAS :基础线性代数子程序,在LAPACK包中有自带,但需进行设置
- libjpeg :jpeg库,Ubuntu已自带
- libz :通用目的的压缩库
1. LAPACK、BLAS的编译
LAPACK是一个高性能的线性代数计算库。我已经在Ubuntu下编译成功,不想编译它的读者可以直接下载我编译的结果lapack4Bundler.zip,解压后共3个文件,将它们拷贝到Bundler工程的lib文件夹里即可。如果想体验LAPACK的编译过程,则可以参考下面几步:
首先下载LAPACK编译包,下载地址为: http://www.netlib.org/lapack/#_strong_lapack_version_3_3_0_strong,目前官方放出的最新版是lapack-3.3.0.tgz:
wget http://www.netlib.org/lapack/lapack-3.3.0.tgz
下载完后解压:
tar -zxvf lapack-3.3.0.tgz
在make之前,需要先创建一个make.inc文件,可以直接根据make.inc.example创建:
cd lapack-3.3.0 cp make.inc.example make.inc
如果是使用Ubuntu+gfortran,则无须更改make.inc里的内容,否则需要根据系统环境和编译器修改文件里对应的选项。
LAPACK依赖BLAS,因此在编译LAPACK前需要提供BLAS包,所幸LAPACK里已经集成了BLAS包,但默认并不编译它。要想编译
LAPACK前先编译BLAS,需要修改一下makefile:
gedit Makefile
光标定位到第11行并将内容改为:
lib: blaslib lapacklib tmglib
保存退出,然后开始make整个工程。
make
编译完成后,目录下将生成blas_LINUX.a、lapack_LINUX.a和tmglib_LINUX.a三个文件。如图1所示。
图1 LAPACK编译结果
将这三个文件分别更名为: libblas.a,liblapack.a,libtmglib.a并复制到bundler-vX.X-source/lib目录下。
2. zlib的编译安装
zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。截至2007年3月,zlib是包含在Coverity的美国国土安全部赞助者选择继续审查的开源项目。
zlib的官方主页为: http://www.zlib.net/,目前最新版为:zlib-1.2.5:
wget http://zlib.net/zlib-1.2.5.tar.gz
完成后解压:
tar -zxvf zlib-1.2.5.tar.gz
cd进去编译安装:
cd zlib-1.2.5 ./configure make sudo make install
四、编译安装Bundler
回到Bundler的工程目录,make进行编译安装。
make
完成后在bin目录下就会看到新生成的bundler可执行文件。
五、测试Bundler
参考上一篇博文,将SIFT文件拷贝到bin目录,然后在终端执行:
./RunBundler.sh examples/ET
完成后,提示运行成功,如图2所示。
图2 Bundler运行结果