facebookresearch / faiss

A library for efficient similarity search and clustering of dense vectors.
https://faiss.ai
MIT License
31.14k stars 3.62k forks source link

Incompatibility with Ubuntu 18.08 #3972

Open carlosgellidaInt opened 1 week ago

carlosgellidaInt commented 1 week ago

Summary

I cannot compile it with ubuntu18 because incompatibility with Google Benchmark

I have the following error during make

ing_rcq_search.cpp.o [ 76%] Building CXX object perf_tests/CMakeFiles/bench_scalar_quantizer_accuracy.dir/bench_scalar_quantizer_accuracy.cpp.o [ 76%] Building CXX object tests/CMakeFiles/faiss_test.dir/test_merge.cpp.o [ 76%] Building CXX object perf_tests/CMakeFiles/bench_scalar_quantizer_decode.dir/bench_scalar_quantizer_decode.cpp.o In file included from /home/carlos/Documents/Faiss/faiss/perf_tests/bench_scalar_quantizer_accuracy.cpp:13:0: /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h: In instantiation of ‘benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...)::<lambda(benchmark::State&)> [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}]’: /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:48: required from ‘struct benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(class benchmark::State&)>’ /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1498:38: required from ‘benchmark::internal::Benchmark benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]’ /home/carlos/Documents/Faiss/faiss/perf_tests/bench_scalar_quantizer_accuracy.cpp:82:18: required from here /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:41: error: variable ‘fn’ has function type name, [=](benchmark::State& st) { fn(st, args...); }); ^~ /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:41: error: variable ‘fn’ has function type /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h: In instantiation of ‘struct benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(class benchmark::State&)>’: /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1498:38: required from ‘benchmark::internal::Benchmark benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]’ /home/carlos/Documents/Faiss/faiss/perf_tests/bench_scalar_quantizer_accuracy.cpp:82:18: required from here /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:41: error: field ‘benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(benchmark::State&)>::’ invalidly declared function type In file included from /home/carlos/Documents/Faiss/faiss/perf_tests/bench_no_multithreading_rcq_search.cpp:10:0: /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h: In instantiation of ‘benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...)::<lambda(benchmark::State&)> [with Lambda = void (&)(benchmark::State&, int, int, float); Args = {int&, int&, float&}]’: /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:48: required from ‘struct benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, int, int, float); Args = {int&, int&, float&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(class benchmark::State&)>’ /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1498:38: required from ‘benchmark::internal::Benchmark benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, int, int, float); Args = {int&, int&, float&}; std::cxx11::string = std::cxx11::basic_string]’ /home/carlos/Documents/Faiss/faiss/perf_tests/bench_no_multithreading_rcq_search.cpp:61:68: required from here /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:41: error: variable ‘fn’ has function type name, [=](benchmark::State& st) { fn(st, args...); }); ^~ /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:41: error: variable ‘fn’ has function type /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h: In instantiation of ‘struct benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, int, int, float); Args = {int&, int&, float&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(class benchmark::State&)>’: /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1498:38: required from ‘benchmark::internal::Benchmark benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, int, int, float); Args = {int&, int&, float&}; std::cxx11::string = std::cxx11::basic_string]’ /home/carlos/Documents/Faiss/faiss/perf_tests/bench_no_multithreading_rcq_search.cpp:61:68: required from here /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:41: error: field ‘benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, int, int, float); Args = {int&, int&, float&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(benchmark::State&)>::’ invalidly declared function type /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1483:22: error: ‘benchmark::internal::Benchmark benchmark::RegisterBenchmark(const string&, Lambda&&) [with Lambda = benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(benchmark::State&)>; std::cxx11::string = std::cxx11::basic_string]’, declared using local type ‘benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(benchmark::State&)>’, is used but never defined [-fpermissive] internal::Benchmark RegisterBenchmark(const std::string& name, Lambda&& fn) { ^~~~~ perf_tests/CMakeFiles/bench_scalar_quantizer_accuracy.dir/build.make:78: recipe for target 'perf_tests/CMakeFiles/bench_scalar_quantizer_accuracy.dir/bench_scalar_quantizer_accuracy.cpp.o' failed make[2]: [perf_tests/CMakeFiles/bench_scalar_quantizer_accuracy.dir/bench_scalar_quantizer_accuracy.cpp.o] Error 1 CMakeFiles/Makefile2:2048: recipe for target 'perf_tests/CMakeFiles/bench_scalar_quantizer_accuracy.dir/all' failed make[1]: [perf_tests/CMakeFiles/bench_scalar_quantizer_accuracy.dir/all] Error 2 make[1]: Waiting for unfinished jobs.... [ 79%] Building CXX object tests/CMakeFiles/faiss_test.dir/test_omp_threads.cpp.o /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1483:22: error: ‘benchmark::internal::Benchmark benchmark::RegisterBenchmark(const string&, Lambda&&) [with Lambda = benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, int, int, float); Args = {int&, int&, float&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(benchmark::State&)>; std::cxx11::string = std::cxx11::basic_string]’, declared using local type ‘benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, int, int, float); Args = {int&, int&, float&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(benchmark::State&)>’, is used but never defined [-fpermissive] internal::Benchmark RegisterBenchmark(const std::string& name, Lambda&& fn) { ^~~~~ perf_tests/CMakeFiles/bench_no_multithreading_rcq_search.dir/build.make:78: recipe for target 'perf_tests/CMakeFiles/bench_no_multithreading_rcq_search.dir/bench_no_multithreading_rcq_search.cpp.o' failed make[2]: [perf_tests/CMakeFiles/bench_no_multithreading_rcq_search.dir/bench_no_multithreading_rcq_search.cpp.o] Error 1 CMakeFiles/Makefile2:2015: recipe for target 'perf_tests/CMakeFiles/bench_no_multithreading_rcq_search.dir/all' failed make[1]: [perf_tests/CMakeFiles/bench_no_multithreading_rcq_search.dir/all] Error 2 [ 79%] Building CXX object tests/CMakeFiles/faiss_test.dir/test_ondisk_ivf.cpp.o [ 79%] Building CXX object tests/CMakeFiles/faiss_test.dir/test_pairs_decoding.cpp.o [ 79%] Building CXX object tests/CMakeFiles/faiss_test.dir/test_params_override.cpp.o In file included from /home/carlos/Documents/Faiss/faiss/perf_tests/bench_scalar_quantizer_decode.cpp:14:0: /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h: In instantiation of ‘benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...)::<lambda(benchmark::State&)> [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}]’: /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:48: required from ‘struct benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(class benchmark::State&)>’ /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1498:38: required from ‘benchmark::internal::Benchmark benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]’ /home/carlos/Documents/Faiss/faiss/perf_tests/bench_scalar_quantizer_decode.cpp:65:71: required from here /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:41: error: variable ‘fn’ has function type name, [=](benchmark::State& st) { fn(st, args...); }); ^~ /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:41: error: variable ‘fn’ has function type /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h: In instantiation of ‘struct benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(class benchmark::State&)>’: /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1498:38: required from ‘benchmark::internal::Benchmark benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]’ /home/carlos/Documents/Faiss/faiss/perf_tests/bench_scalar_quantizer_decode.cpp:65:71: required from here /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1499:41: error: field ‘benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(benchmark::State&)>::’ invalidly declared function type /home/carlos/Documents/Faiss/faiss/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:1483:22: error: ‘benchmark::internal::Benchmark benchmark::RegisterBenchmark(const string&, Lambda&&) [with Lambda = benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(benchmark::State&)>; std::cxx11::string = std::cxx11::basic_string]’, declared using local type ‘benchmark::RegisterBenchmark(const string&, Lambda&&, Args&& ...) [with Lambda = void (&)(benchmark::State&, faiss::ScalarQuantizer::QuantizerType, int, int); Args = {faiss::ScalarQuantizer::QuantizerType&, int&, int&}; std::cxx11::string = std::cxx11::basic_string]::<lambda(benchmark::State&)>’, is used but never defined [-fpermissive] internal::Benchmark RegisterBenchmark(const std::string& name, Lambda&& fn) { ^~~~~ perf_tests/CMakeFiles/bench_scalar_quantizer_decode.dir/build.make:78: recipe for target 'perf_tests/CMakeFiles/bench_scalar_quantizer_decode.dir/bench_scalar_quantizer_decode.cpp.o' failed make[2]: [perf_tests/CMakeFiles/bench_scalar_quantizer_decode.dir/bench_scalar_quantizer_decode.cpp.o] Error 1 CMakeFiles/Makefile2:2081: recipe for target 'perf_tests/CMakeFiles/bench_scalar_quantizer_decode.dir/all' failed

When I went back to another commit with hard reset it works fine, but maybe it can be solved in current version, thanks!

junjieqi commented 6 days ago

@carlosgellidaInt could you help provide more detailed instructions to help us reproduce the error? In addition, you mentioned you went back to another commit and which exact commit you referred? Thanks

junjieqi commented 1 day ago

@carlosgellidaInt in case you still have this issue