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
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. –