代码改变世界

安装CLAPACK, levmar and homest的方法

2015-01-09 06:23  美女驴  阅读(1412)  评论(0编辑  收藏  举报

其实我一开始只是想用homest的,结果发现homest需要levmar,而levmar需要CLAPACK

 

我一开始实在linux上装的,跌跌撞撞终于编译好了最后一个库homest,结果跑demo却出错了,错误如下:

Homography estimation using 933 image matches
** On entry to DGESVD, parameter number 13 had an illegal value
** On entry to DGESVD, parameter number 13 had an illegal value
LAPACK error: illegal value for argument 13 of dgesdd in homest_min_Ax_normSVD()
 
Affine homography estimation using 933 image matches
** On entry to DGELSS, parameter number  7 had an illegal value
** On entry to DGELSS, parameter number  7 had an illegal value
LAPACK error: illegal value for argument 7 of dgelss in homest_min_AxbSVD()

 

查到src file也没看出究竟为啥错了!一晚上都不高兴,果断给库作者写了封邮件,作者很给力,第二天就给我回了,说可能是32bit和64bit的问题。。。 而且建议我windows

好吧,又是网上开始搜,先搜到这个网站

http://icl.cs.utk.edu/lapack-for-windows/clapack/index.html

首先下载 CLAPACK-EXAMPLE Visual Studio project, 我放到了E:/OPLIB/

然后下载blas.lib, libf2c.lib, lapack.lib,把这几个库放到上面那个project的lib文件夹下

用visual studio (我用的2010)打开这个project就能运行了!基本上说明CLAPACK已经装好!

 

下来到这个网站

http://users.ics.forth.gr/~lourakis/levmar/index.html

下载levmar-2.6,由于我们要用nmake编译,所以修改其中的Makefile.vc

LAPACKLIBS_PATH=E:\OPLIB\CLAPACK-EXAMPLE\CLAPACK-EXAMPLE\lib

LAPACKLIBS=lapack.lib blas.lib libf2c.lib

打开visual studio 2010的命令窗口 (run as administrator),进入到levmar/Makefile.vc 所在路径, 输入以下命令

nmake /f Makefile.vc

这是levmar的FAQ http://users.ics.forth.gr/~lourakis/levmar/faq.html

当我在linux下直接编译CLAPACK时,会出现 link error for sgemm/dgemm, 请参考其中的修改方法,

而如果跟我一样选择直接下载编译好的库,就不会出现类似错误了

 

最后一步啦,从 http://users.ics.forth.gr/~lourakis/homest/ 下载homest-1.4

同样修改 Makefile.vc

LEVMARHDR_PATH=E:\OPLIB\levmar-2.6\levmar-2.6

LEVMARLIB_PATH=E:\OPLIB\levmar-2.6\levmar-2.6
LAPACKLIBS_PATH=E:\OPLIB\CLAPACK-EXAMPLE\CLAPACK-EXAMPLE\lib

LIBS=levmar.lib lapack.lib blas.lib libf2c.lib

打开visual studio 2010命令窗口, 进入到homest-1.4/Makefile.vc, 输入以下命令

nmake /f Makefile.vc

编译好后,我们就可以运行以下demo

homest_demo test/matches.txt

homest_demo -a test/matches.txt

 

其实整个过程并不算复杂,但是由于版本比较混乱,网上各种答案都有,导致我试了很多次才找到能正确编译的方法~