zoukankan      html  css  js  c++  java
  • (Windows)VS2017下编译FLANN1.8.4

    一、编译HDF5

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

    2、解压并编译

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

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

     二、编译FLANN

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

    2、解压

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

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

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

     点击Configure 

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

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

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

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

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

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

     

     三、调用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++目录-->包含目录

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

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

     

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

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

    4、可能遇到的问题

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

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

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

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

    #ifdef _MSC_VER

    BASIC_TYPE_SERIALIZER(unsigned __int64);

    #endif

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

  • 相关阅读:
    我参与过的开源项目
    chineking / WeiboCrawler / wiki / Home — Bitbucket
    PIL应用之生成验证码图片
    hurl
    Hadoop笔记之安装及伪分布式模式配置
    httpbin(1): HTTP Client Testing Service
    动态规划求编辑距离 残阳似血的博客
    cppreference.com
    sscanf
    在python中定义二维数组
  • 原文地址:https://www.cnblogs.com/zerotoinfinity/p/12627323.html
Copyright © 2011-2022 走看看