天天看点

sba 在windows下的编译方法

最近在用sba,一直找不到怎么在window下编译,最近看到一篇博客,写的非常不错,自己编译通过了,大家可以参考。

windows下 Sparse Bundle Adjustment 编译问题

        很多论文中提到了利用Bundle Adjustment进行优化的问题。开始准备自己编写一个,可惜水平有限,一直在搁浅当中。不过好在存在一种开源软件叫做Sba,即Sparse Bundle Adjustment可以供使用,省去了不少功夫。

        可是,把文件包下载来后,make总有问题。今天终于找到了解决的办法。简单记录一下。

        首先,你会发现,文件包中有好多的makefile:

sba 在windows下的编译方法

        (1) 一般都会用Makefile,但是编译到一半出问题: cd demo make:找不到相关路径。这个问题我看了很久的makefile源码,也看不出个端倪。暂且不管,不用第一个。

        (2)icc不知到是啥东西,果断不用它。

        (3)Makedfile.vc一般用VC环境下的nmake进行编译。本文就用它进行编译。

        首先进入VC环境。打开cmd命令行,cd进入VC安装目录,运行vcvars32.bat:

sba 在windows下的编译方法

        然后进入sba文件夹进行编译,写此文时的最新版本是sba-1.6。执行nmake /f Makefile.vc:

sba 在windows下的编译方法

        不出意外的话,已经出现问题了。

sba 在windows下的编译方法

        开始以为是sba自身的lib出了问题,不过最后在网上找到了相关的库。

        http://www.netlib.org/clapack/CLAPACK3-Windows.zip

        下载此文件,你就什么都明白了。sba所缺的东西里面全都有。一共四个静态库,clapack.lib ,blas.lib,libF77.lib,libI77.lib。这四个库正是sba编译所缺的。将这四个库复制到sba目录下,再次nmake,就能编译成功了。就这么简单。。。。

       引用链接:http://blog.csdn.net/royalvane/article/details/8125388

但是在Matlab下编译不成功

正在创建库 C:\DOCUME~1\SLLIN\LOCALS~1\TEMP\MEX_RW~1\templib.x 和对象 C:\DOCUME~1\SLLIN\LOCALS~1\TEMP\MEX_RW~1\templib.exp 

sba.obj : error LNK2019: 无法解析的外部符号 _sba_motstr_levmar,该符号在函数 _mexFunction 中被引用 

sba.obj : error LNK2019: 无法解析的外部符号 _sba_mot_levmar,该符号在函数 _mexFunction 中被引用 

sba.obj : error LNK2019: 无法解析的外部符号 _sba_str_levmar,该符号在函数 _mexFunction 中被引用 

sba.mexw32 : fatal error LNK1120: 3 个无法解析的外部命令 

  C:\PROGRA~1\MATLAB\R2010B\BIN\MEX.PL: Error: Link of 'sba.mexw32' failed. 

不知道为什么,哪位高手能给解决一下啊

继续阅读