参考转自http://www.cnblogs.com/weizhoupan/archive/2011/03/08/1977366.html 编译安装,因为编译过程中遇到了一些问题,将自己的经验总结一下!
利用Noah Snavely提供的源码包,网址:http://www.cs.cornell.edu/~snavely/bundler/ 。(自己下载的是:bundler_sfm-master.tar.gz)
源码中utils/bundler.py 需要系统中安装了python和Python Image Library (PIL)。安装步骤如下:
安装python2.7:
sudo apt-get install python2.7;
sudo apt-get install python-dev;
安装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
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及其依赖库的安装参考网址:ceres-solver.org。
注意:安装完glags和google-glog后,要将/usr/local/lib 中的共享链接库:libglog.so.0 和 libgflags.so.2 复制/usr/lib中;
回到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