2016-05-25 144 views
0

我试图编译这个flann_example.cpp从FLANN库:为什么我无法链接此库?

#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; 
} 

这是我尝试编译:

g++ flann_example.cpp -I/usr/include/hdf5/serial -L/usr/lib/x86_64-linux-gnu/hdf5/serial/lib -L/usr/lib/x86_64-linux-gnu -lhdf5

但我收到此错误:

/tmp/ccpHAtGt.o: In function `flann::serialization::SaveArchive::initBlock()': 
flann_example.cpp:(.text._ZN5flann13serialization11SaveArchive9initBlockEv[_ZN5flann13serialization11SaveArchive9initBlockEv]+0xb9): undefined reference to `LZ4_resetStreamHC' 
/tmp/ccpHAtGt.o: In function `flann::serialization::SaveArchive::flushBlock()': 
flann_example.cpp:(.text._ZN5flann13serialization11SaveArchive10flushBlockEv[_ZN5flann13serialization11SaveArchive10flushBlockEv]+0xc5): undefined reference to `LZ4_compress_HC_continue' 
flann_example.cpp:(.text._ZN5flann13serialization11SaveArchive10flushBlockEv[_ZN5flann13serialization11SaveArchive10flushBlockEv]+0x18c): undefined reference to `LZ4_compress_HC_continue' 
/tmp/ccpHAtGt.o: In function `flann::serialization::LoadArchive::decompressAndLoadV10(_IO_FILE*)': 
flann_example.cpp:(.text._ZN5flann13serialization11LoadArchive20decompressAndLoadV10EP8_IO_FILE[_ZN5flann13serialization11LoadArchive20decompressAndLoadV10EP8_IO_FILE]+0x225): undefined reference to `LZ4_decompress_safe' 
/tmp/ccpHAtGt.o: In function `flann::serialization::LoadArchive::initBlock(_IO_FILE*)': 
flann_example.cpp:(.text._ZN5flann13serialization11LoadArchive9initBlockEP8_IO_FILE[_ZN5flann13serialization11LoadArchive9initBlockEP8_IO_FILE]+0x1f7): undefined reference to `LZ4_setStreamDecode' 
/tmp/ccpHAtGt.o: In function `flann::serialization::LoadArchive::loadBlock(char*, unsigned long, _IO_FILE*)': 
flann_example.cpp:(.text._ZN5flann13serialization11LoadArchive9loadBlockEPcmP8_IO_FILE[_ZN5flann13serialization11LoadArchive9loadBlockEPcmP8_IO_FILE]+0xcc): undefined reference to `LZ4_decompress_safe_continue' 
collect2: error: ld returned 1 exit status 

然后,由于liblz4.so.1/usr/lib/x86_64-linux-gnu我试着这个:

g++ flann_example.cpp -I/usr/include/hdf5/serial -L/usr/lib/x86_64-linux-gnu/hdf5/serial/lib -L/usr/lib/x86_64-linux-gnu -lhdf5 -llz4 

但是:

/usr/bin/ld: cannot find -llz4 
collect2: error: ld returned 1 exit status 
+2

在您的环境中搜索'liblz4.so'。如果你没有一个,并且你确定'liblz4.so.1'是你需要的,那么只需要在同一个目录下创建一个名为'liblz4.so'的链接到这个文件并且再次运行这个链接阶段。 –

回答

0

由于liblz4.so不存在于系统中,我不得不:

sudo apt-get install liblz4-dev

然后:

g++ flann_example.cpp -I/usr/include/hdf5/serial -L/usr/lib/x86_64-linux-gnu/hdf5/serial/lib -L/usr/lib/x86_64-linux-gnu -lhdf5 -llz4

工作。

相关问题