一、预先编译HDF5
Step 1: 下载源码
官方下载地址:https://support.hdfgroup.org/HDF5/release/cmakebuild518.html
点击表格中Software下的Windows链接下载
Step 2: 解压并编译
解压下载到的:CMake-hdf5-1.8.20.zip。注意:路径中不要有空格。
右键build-VS2015-64.bat,编辑参数:
ctest -S HDF5config.cmake,BUILD_GENERATOR=VS2017 -C Release -V -O hdf5.log
这里按照需要修改为VS2017。
进入命令行:运行build-VS2015-64.bat,等待编译完成,大约需要10分钟左右。若顺利,编译成功。
二、编译flann
Step 1: 源码下载
地址:https://github.com/mariusmuja/flann
Step 2: 源码编译
利用cmake-gui进行编译,1)Configure, 2)Generate, 3)Open Project (“flann.sln”)
注意:要在x64和Release模式下进行编译。若顺利,编译成功。
三、flann调试
flann在源码中flann-master/examples/flann_example.cpp提供了测试用例。
Step 1: 新建Solution
新建一个Solution,比如flann-test。新建一个demo.cpp文件,将flann_example.cpp的全部内容拷贝其中。
#include <flann/flann.hpp>
#include <flann/io/hdf5.h>
#include <stdio.h>
using namespace flann;
int main(int argc, char** argv)
{
int nn = 3;
Matrix<float> dataset;
Matrix<float> query;
load_from_file(dataset, "dataset.hdf5", "dataset");
load_from_file(query, "dataset.hdf5", "query");
Matrix<int> indices(new int[query.rows*nn], query.rows, nn);
Matrix<float> dists(new float[query.rows*nn], query.rows, nn);
// construct an randomized kd-tree index using 4 kd-trees
Index<L2<float> > index(dataset, flann::KDTreeIndexParams(4));
index.buildIndex();
// do a knn search, using 128 checks
index.knnSearch(query, indices, dists, nn, flann::SearchParams(128));
flann::save_to_file(indices, "result.hdf5", "result");
delete[] dataset.ptr();
delete[] query.ptr();
delete[] indices.ptr();
delete[] dists.ptr();
return 0;
}
Step 2: 配置项目
1)在Configuration Properties->VC++ Directories->Include Directories中添加:
i. D:\Open Libraries\flann-master\src\cpp(flann中源码所含头文件)
ii. D:\CMake-hdf5-1.8.20\build (HDF5中编译目录中的头文件)
iii. D:\CMake-hdf5-1.8.20\hdf5-1.8.20\src (HDF5中源码所含头文件)
2)在Configuration Properties->VC++ Directories->Library Directories中添加:
i. D:\Open Libraries\flann-master\build\lib\Release (flann中编译的的静态库)
ii. D:\CMake-hdf5-1.8.20\build\bin\Release (HDF5中编译的静态库)
3)在Configuration Properties->VC++ Directories->Linker->Input->Additional Dependencies中添加:
flann_cpp.lib
libhdf5.lib
libhdf5_cpp.lib
libzlib.lib
libszip.lib
Step 3: 下载调试所需dataset.hdf5文件
网址:http://www.cs.ubc.ca/research/flann/uploads/FLANN/datasets/dataset.hdf5
Step 4: 可能遇到的问题
1)编译时报pop_t问题的解决
编译时会报pop_t identifier not found的错误,参考:https://github.com/mariusmuja/flann/issues/386
将typedef unsigned long long pop_t移到宏定义前,如图:
将原有位置的此句注释掉即可,如图:
2)执行时报找不到flann_cpp.dll的解决
拷贝flann_cpp.dll到project根目录。
Step 5: 编译并执行
若执行成功,会生成result.hdf5文件,表示编译并执行成功。
四、参考:
[1] https://github.com/mariusmuja/flann
[2] https://blog.csdn.net/hjq376247328/article/details/62224635
[3] https://blog.csdn.net/maweifei/article/details/80961541
[4] https://github.com/mariusmuja/flann/issues/386
[5] https://github.com/mariusmuja/flann/issues/354