1 flann
1.1 简要介绍
flann
库全称是Fast Library for Approximate Nearest Neighbours
,它是目前最完整的(近似)最近邻开源库。不但实现了一系列查找算法,还包含了一种自动选择最快算法的机制。
1.2 依赖库
flann
不需要再配置其他库。
1.3 源码包下载
flann
源码地址:github
:https://github.com/flann-lib/flann.git
2 Cmake构建项目
2.1 路径
源代码路径:D:/ThirdParty/flann/flann_1.9.1
构建项目路径:D:/ThirdParty/flann/flann_1.9.1_build
2.2 构建选项
名称 | 值 | 备注 |
---|---|---|
BUILD_TESTS | false | |
BUILD_MATLAB_BINDINGS | false | |
BUILD_PYTHON_BINDINGS | false | |
CMAKE_INSTALL_PREFIX | path | 编译时生成的安装文件路径 |
CMAKE_DEBUG_POSTFIX | -gd | debug 版本库名称后缀 |
注:
flann
默认情况下会动态库和静态库都会生成。
库名称中,含有s
的是静态库,含有gd
的是debug
版本库。
2.3 构建项目
步骤如下:
- 指定源码路径;
- 指定构建项目路径;
- 点击
Configure
; - 按照2.2节表中的值进行设置;
- 再次点击
Configure
; - 点击
Generate
,构建项目路径中将生成解决方案文件flann.sln
。
点击
Configure
或Generate
后,如果顺利,会出现Configuring done
或Generating done
。
3 打开解决方案并编译
3.1 编译解决方案
点击Open Project
(或者在2.3节步骤2中指定的构建项目路径中,找到生成的解决方案文件flann.sln
,通过Visual Studio
打开),打开通过Cmake
构建的项目;
选中ALL_BUILD
项目,分别在Debug
和Release
模式下,重新生成解决方案。
3.2 安装flann
选中INSTALL
项目,右击,重新生成,此时,将会在指定路径下(2.2节表中CMAKE_INSTALL_PREFIX
选项的值)主要生成3个文件夹include
和lib
和bin
。
4 实际项目环境配置
注:以下通过属性表的方式进行环境配置。
4.1 附加包含目录
$(flann)\include
$(flann)
(在系统环境变量中添加并设置)就是2.2节表中CMAKE_INSTALL_PREFIX
选项的值。
4.2 附加库目录
$(flann)\lib
4.3 附加依赖项
flann-gd.lib
或flann.lib
将库目录$(flann)\lib
中文件后缀名为.lib
的文件依次添加至附加依赖项中,并依次配置debug版本(文件名中有gd
)和release版本。
注意,添加附加依赖项时,不要漏掉文件后缀名
.lib
!
4.4 动态库
将动态库目录添加至系统环境变量Path
,步骤如下:
- 计算机右击,点击“属性”;
- 点击“高级系统设置”;
- 点击“环境变量”;
- 双击
Path
; - 添加
%flann%\bin
,该目录下是包含了动态库文件。
本文使用的都是相对路径,因此需事先设置好环境变量
flann
,值为CMAKE_INSTALL_PREFIX
对应的目录,也可以使用绝对路径。
注:上述步骤是按照加载
flann
动态库的方式进行配置的;
当然也可以按照静态库的方式配置,可省略步骤4.4
。
4.5 测试代码
#pragma warning(disable:4996)
//typedef unsigned long long pop_t;
#include <flann/flann.hpp>
#include <iostream>
int main()
{
int i_array[6] = { 1,2,3,4,5,6 };
flann::Matrix<int> fmatrix(i_array, 2, 3);
for (int row = 0; row < 2; ++row) {
for (int col = 0; col < 3; ++col) {
std::cout << fmatrix[row][col] << " ";
}
std::cout << std::endl;
}
std::system("pause");
return 0;
}
注意:flann
库中的头文件dist.h
有点问题,当使用Visual Studio自带的编译器编译用户程序过程中,会出现pop_t
未声明的标识符或pop_t
找不到标识符的错误,解决方案如下:
打开dist.h
头文件,在报错的地方添加typedef unsigned long long pop_t;
语句,如图: