(Windows)VS2017下编译FLANN1.8.4

摘要:
注意:运行build-VS2017-64.bat并等待编译完成的路径中应该没有空格。这允许调试版本编译带有后缀d的二进制文件,以将它们与发布版本编译的二进制文件区分开来。建议这样做。添加后,单击配置。如果没有显示红色配置,则可以单击Generate4,打开Build文件夹下的flann.sln,并在64位下生成调试版本。

一、编译HDF5

1、下载源码:https://github.com/pengzerong/HDF5

2、解压并编译

解压下载到的:CMake-hdf5-1.12.0.zip。注意:路径中不要有空格

运行build-VS2017-64.bat,等待编译完成。

(Windows)VS2017下编译FLANN1.8.4第1张

 二、编译FLANN

1、下载源码:https://github.com/pengzerong/FLANN

2、解压

(我的解压路径为G:flann-1.8.4)

在该文件夹下创建Build文件夹作为编译的文件夹,flann-res作为临时安装的文件夹,flann-debug作为Debug版本的安装目录,flann-release作为Release版本的安装目录

(Windows)VS2017下编译FLANN1.8.4第2张

3、打开CMake-gui,将flann-1.8.4-src文件夹中的CMakeLists.txt拖至CMake中,设置创建路径,可以勾选Grouped和Advanced选项

(Windows)VS2017下编译FLANN1.8.4第3张

 点击Configure 

(Windows)VS2017下编译FLANN1.8.4第4张

将CMAKE中的CMAKE_INSTALL_PREFIX修改为我们创建的flann-res目录,此为临时安装的目录

(Windows)VS2017下编译FLANN1.8.4第5张

接着点击Add Entry,添加Name:CMAKE_DEBUG_POSTFIX,Type为STRING,Value为d,Description可为空。这样可以让debug版本编译出二进制文件,带有后缀d.以便和release版本编译出的二进制文件相区分,建议这么做。

添加之后,点击Configure。若没有红色配置出现,可点击Generate

(Windows)VS2017下编译FLANN1.8.4第6张

 4、打开Build文件夹下的flann.sln,进行64位下Debug版本的生成。

在Debug状态下,右键ALL_BUILD生成。生成成功后右键INSTALL-仅用于项目-仅生成INSTALL,完成debug的安装

(Windows)VS2017下编译FLANN1.8.4第7张

5.此时在flann-res目录下生成以下文件,将它们剪切至flann-debug文件夹下完成安装(Release版安装过程一直,不赘述)

 (Windows)VS2017下编译FLANN1.8.4第8张

 三、调用FLANN

https://github.com/pengzerong/flann-test

 1、新建解决方案flann-test,将以下代码拷贝过去

#include <iostream>
#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));

    for (int i = indices.rows; i < indices.rows; i++)
    {
        for (int j = 0; j < indices.cols; j++)
        {
            std::cout << indices[i][j] << " ";
        }
        std::cout << std::endl;
    }
    std::cout << "index size: " << index.size() << std::endl;
    std::cout << std::endl;

    flann::save_to_file(indices, "result.hdf5", "result");

    delete[] dataset.ptr();
    delete[] query.ptr();
    delete[] indices.ptr();
    delete[] dists.ptr();

    return 0;
}

2、配置项目

属性-->VC++目录-->包含目录

(Windows)VS2017下编译FLANN1.8.4第9张

属性-->VC++目录-->库目录

(Windows)VS2017下编译FLANN1.8.4第10张

属性-->链接器-->输入-->附加依赖项

 (Windows)VS2017下编译FLANN1.8.4第11张

3、下载调试数据文件dataset.hdf5

https://github.com/pengzerong/flann-test/blob/master/dataset.hdf5

4、可能遇到的问题

1) 编译时报pop_t问题的解决

(Windows)VS2017下编译FLANN1.8.4第12张

2) x64环境下编译flann源代码编译错误 .serialize 左边必须有类/结构/联合

flann在x86环境下能很好的编译通过,但是在x64环境下面就会出现这个问题,这是源代码本身的问题

解决办法在serialzation.h的96行代码后面增加如下代码:

#ifdef _MSC_VER

BASIC_TYPE_SERIALIZER(unsigned __int64);

#endif

 5、若执行成功,会生成result.hdf5文件,表示编译并执行成功

免责声明:文章转载自《(Windows)VS2017下编译FLANN1.8.4》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇哲学家问题观察死锁delphi 线程教学第二节:在线程时空中操作界面(UI)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python开源库h5py快速指南

转自:http://blog.csdn.net/yudf2010/article/details/50353292 1. 核心概念 一个HDF5文件是一种存放两类对象的容器:dataset和group. Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,存放dataset和其他group。在使用h5py的时候需要牢记一句话:group...

安装caffe碰到的坑(各种.so未找到)

./include/caffe/common.hpp:4:32: fatal error: boost/shared_ptr.hpp: 没有那个文件或目录 所有类似于上面的错误,都可以用如下格式来解决: 解决方案:出现该错误的原因是少了依赖。 在命令行输入: $ sudo apt-get install --no-install-recommends li...