2016-05-25 10 views
0

Ich versuche, diese flann_example.cpp aus der FLANN Bibliothek zu kompilieren:Warum kann ich diese Bibliothek nicht verknüpfen?

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

Und das ist, wie ich versuche, es zu kompilieren:

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

Aber ich erhalte diesen Fehler:

/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 

Dann, seit liblz4.so.1 ist in /usr/lib/x86_64-linux-gnu Ich versuche mit diesem:

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 

Aber:

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

Suchen Sie in Ihrer Umgebung nach 'liblz4.so'. Wenn Sie keins haben und sicher sind, dass 'liblz4.so.1' das ist, was Sie brauchen, dann erstellen Sie einfach einen Link mit dem Namen' liblz4.so' zu dieser Datei im selben Verzeichnis und führen Sie die Verknüpfungsstufe erneut aus. –

Antwort

0

Seit liblz4.so war in dem System nicht vorhanden ist, musste ich:

sudo apt-get install liblz4-dev

und dann:

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

gearbeitet.

Verwandte Themen