vs2010 编译 levmar 2.6,(Levenberg-Marquardt)

来源:互联网 发布:绿地控股历史价格数据 编辑:程序博客网 时间:2024/06/02 02:41

LM算法是非线性最小二乘解方程的最常用的算法。以前在稀疏区域网平差中见过,因此对LM很熟,自己编写的最小二乘算法不能很快的收敛(就是编程太菜了。。。。),决定采用LM的库,用VS2010编译了一把。


    • 下载clapackLM库
    • cmake生成vs工程


下载clapack,LM库

LM官网,下载 levmar-2.6
clapack库,解压后/LIB文件夹中有预先编译好的lib文件,最好自己打开vs工程编译生成lib文件。具体在这里
将libf2c.lib,tmglib.lib,BLAS.lib,clapack.lib 放在文件夹lib里面,libf2c.lib,改名为f2c.lib。


cmake生成vs工程

我使用预先编译好的lib文件,用camke配置vs工程,具体配置如下图:

这里写图片描述

红框里面是配置lib的路径,填写文件夹lib的路径。

打开生成的vs工程,配置lmdemo工程,在属性链接器的输入里面忽略特定默认库这一项填写libcmt.lib

到此配置完成,生成一把结果有错误,报错如下:

2>levmar.lib(misc.obj) : error LNK2019: 无法解析的外部符号 sgemm_,该符号在函数 slevmar_trans_mat_mat_mult 中被引用
2>levmar.lib(misc.obj) : error LNK2019: 无法解析的外部符号 dgemm_,该符号在函数 dlevmar_trans_mat_mat_mult 中被引用
2>D:\BA\ba_code\code_internet\LM_code\levmar-2.6\levmar-2.6\Release\lmdemo.exe : fatal error LNK1120: 2 个无法解析的外部命令

原先我以为是预先编译的lib有问题,自己编译了一遍还是同样的问题,后来发现需要#include “blaswrap.h”,在levmar工程中,打开misc.c文件,在最开始添加#include “blaswrap.h”,
在levmar工程的包含库目录里面包含clapack的 INCLUDE文件夹(在解压后的clapack库里面)
再生成一把,搞定。将Imdemo设为启动项目,运行成功。

这里写图片描述

1 0