【发布时间】:2019-01-14 21:46:43
【问题描述】:
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。我检查了模块中提到的许多其他变量,但我尝试的所有变量都没有设置。
有没有正确的方法来做到这一点?还是我应该只使用正常的旗帜并继续我的生活?
【问题讨论】:
-
您是否在代码中直接使用
pthread_*API? -
没有。我正在使用 std::thread。