对`std :: thread :: _ M_start_thread CMake的基准未定义引用

时间:2018-10-07 14:47:23

标签: c++ cmake pthreads google-benchmark

我想使用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 :(得分:1)

观察:这是一个链接器错误,代码可以正常编译,但是当链接器尝试将所有对象和库组合成一个可执行文件时,未找到符号。

Getting undefined reference to std::thread::_M_start_thread <-相关问题

您可能已经安装了多个编译器/库版本,并且正在使用较新的c ++头文件进行编译,并链接到较旧的c ++库。