Бенчмарк: неопределенная ссылка на `std :: thread :: _ M_start_thread CMake - PullRequest
0 голосов
/ 07 октября 2018

Я хочу использовать 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 Ответ

0 голосов
/ 09 октября 2018

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

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

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

...