CMake(https://github.com/Kitware/CMake/blob/master/Modules/FindThreads.cmake)的来源声明了有关“ FindThreads”功能的以下内容:
如果使用+进行线程化,则C ++ 11和更高版本不需要此模块
std::thread
来自标准库。
但是,如果我遵循此建议(在我的Mint18 x86_64系统上,gcc8,CMake 3.13.2),我会得到:
/usr/bin/ld: CMakeFiles/prism-esm-dummy.dir/src/main.cpp.o: undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
如果练习了该模块(最好的话,我可以使用其他SO文章和先前给出的建议来计算):
set (THREADS_PREFER_PTHREAD_FLAG ON)
find_package (Threads REQUIRED)
add_executable(my_app main.cpp)
target_link_libraries (my_app Threads::Threads)
...结果是相同的。
THREADS_FOUND
是true
,而CMAKE_USE_PTHREADS_INIT
是1
,但是在编译过程中我没有得到-pthread
,在链接过程中却没有得到-lpthread
。我检查了模块中提到的许多其他变量,但未尝试设置的所有变量。
有正确的方法吗?还是我应该只使用正常的标志继续生活?
答案 0 :(得分:2)
find_package( Threads )
target_link_libraries( ${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT} )