(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文件,表示編譯並執行成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM