Бенчмарк: неопределенная ссылка на `std :: thread :: _ M_start_thread CMake

Я хочу использовать Google Benchmark, для этого у меня есть простой тест, написанный в файле main.cpp. для создания моего проекта у меня есть файл CMake следующим образом:

 cmake_minimum_required(VERSION 3.10)

include_directories(${CMAKE_SOURCE_DIR}/include)

find_library(BENCHMARK_LIBRARY NAMES benchmark HINTS "${CMAKE_SOURCE_DIR}/externals/lib")
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

# benchmark binary
add_executable(benchmark main.cpp)
target_link_libraries(benchmark ${BENCHMARK_LIBRARY} Threads::Threads)

Но каждый раз, когда я запускаю «make», он выдает ошибку:

In function `benchmark::RunSpecifiedBenchmarks(benchmark::BenchmarkReporter*,
benchmark::BenchmarkReporter*)':
benchmark.cc:(.text+0x214b): undefined reference to `std::thread
::_M_start_thread(std::unique_ptr<std::thread::_State,
std::default_delete<std::thread::_State> >, void (*)())'

Что я делаю неправильно? Я только начал работать с CMake, поэтому у меня мало знаний. Я искал, но не мог найти решение.
Заранее благодарю за любую помощь.

1

Решение

Замечание: это ошибка компоновщика, код скомпилирован нормально, но символ не был найден, когда компоновщик попытался объединить все объекты и библиотеки в исполняемый файл.

Получение неопределенной ссылки на std :: thread :: _ M_start_thread <- связанный вопрос

Вероятно, у вас установлено несколько версий компилятора / библиотеки, и вы компилируете с новыми заголовками c ++ и связываетесь со старой библиотекой c ++.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]