首页 > 代码库 > Ubuntu 下编译安装Bundler

Ubuntu 下编译安装Bundler

    参考转自http://www.cnblogs.com/weizhoupan/archive/2011/03/08/1977366.html 编译安装,因为编译过程中遇到了一些问题,将自己的经验总结一下!

一、Bundler源码包获取

利用Noah Snavely提供的源码包,网址:http://www.cs.cornell.edu/~snavely/bundler/ 。(自己下载的是:bundler_sfm-master.tar.gz)

二、安装python

 源码中utils/bundler.py 需要系统中安装了python和Python Image Library (PIL)。安装步骤如下:

安装python2.7:

sudo apt-get install python2.7;

安装Python Image Library :

$ sudo apt-get install python-imaging

$ sudo apt-get install libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev

 

$ sudo ln -s /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/

$ sudo ln -s /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/

$ sudo ln -s /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/

 

$ sudo apt-get install pip

$ pip install PIL

三、安装Gfortran

Bundler所依赖的库中有些库是用Fortran写成的(例如./lib/minpack)。为了编译Fortran程序,需要安装GFortran编译器。

$ sudo apt-get install gfortran

四、编译 / 安装依赖库

Bundler所依赖的外部库列表如下:

(1)LAPACK:线性代数计算库

(2)BLAS  :基础线性代数子程序,在LAPACK包中有自带,但需进行设置

(3)libjpeg  :jpeg库,Ubuntu已自带

(4)libz   :通用目的的压缩库

1. LAPACK、BLAS的编译

     LAPACK(Linear Algebra PACKage)库,是用Fortran语言编写的线性代数计算库,包含线性方程组求解(AX=b)、矩阵分解、矩阵求逆、求矩阵特征值、奇异值等。该库用BLAS库做底层运算,许多高层的数学库都用BLAS和LAPACK做底层。
     BLAS(Basic Linear Algebra Subprograms)库,是用Fortran语言实现的向量和矩阵运算库,是许多数值计算软件库的核心, 但也有一些其它的包装, 如cblas是C语言, 也有C++的包装, boost/ublas 是C++ template class的实现; 另外还有一些特别的实现, 如intel MKL, AMD core math library blas就是做向量、矩阵的基本运算,如加、减、乘等操作。

a)下载lapack编译包

网址:http://www.netlib.org/lapack/#_strong_lapack_version_3_3_0_strong。(自己下载的是:lapack-3.5.0.tgz)

b)解压

$ tar -zxvf lapack-3.5.0.tgz

c)在make之前,需要先创建一个make.inc文件,可以直接根据make.inc.example创建:

$ cd lapack-3.5.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

编译完成后,目录下将生成lib***blas.a、liblapack.a和libtmglib.a三个文件。

将这三个文件分别更名为: libblas.a,liblapack.a,libtmglib.a并复制到bundler_sfm-master/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.8。

a) 解压:

$ tar -zxvf zlib-1.2.8.tar.gz

b) cd进去编译安装:

$ cd zlib-1.2.8

$ ./configure

$ make

$ sudo make install

五、编译安装ceres-solver

ceres及其依赖库的安装参考网址:ceres-solver.org

编译安装Bundler

回到Bundler的工程目录,make进行编译安装。

$ make

完成后在bin目录下就会看到新生成的bundler可执行文件。

 

本人在编译过程主要出现以下问题:

问题一:

gcc: error trying to exec ‘f951‘: execvp: 没有那个文件或目录

make[1]: *** [dpmpar.o] 错误 1

解决方法:

缺少fortran编译器,安装gfortran; 命令:sudo apt-get install gfortran; 如果还是出现相同的错误,检查gcc,g++版本是否一直,因为自己之前将gcc4.6换到了gcc4.4,而自己安装的gfortran是需要4.6的,所以一直编译有问题,将其换回来,编译通过。

问题2:

安装成功ceres-solves后,编译出现:

BundleCeres.cpp:20:25: 致命错误: ceres/ceres.h:没有那个文件或目录 编译中断。

make[1]: *** [BundleCeres.o] 错误 1

make[1]:正在离开目录 `/home/linasnoopy/2014_2015/3D/bundler_sfm_master/src‘ make: *** [default] 错误 2

解决方法:

src/makefile里添加路径(ceres/ceres.h所在的路径)

路径添加后为:

INCLUDE_PATH=-I../lib/imagelib -I../lib/sfm-driver -I../lib/matrix \  

                            -I../lib/5point -I../lib/sba-1.5 -I../lib/ann_1.1_char/include  \  

                            -I../include -I../../ceres-solver-1.9.0/include -I../../ceres-solver-1.9.0/internal \        

                            -I../../ceres-solver-1.9.0/config

 

Ubuntu 下编译安装Bundler