CMake 的源代码 ( https://github.com/Kitware/CMake/blob/master/Modules/FindThreads.cmake ) 声明了以下关于“FindThreads”功能的信息:
如果使用
std::thread标准库完成线程处理,则 C++11 及更高版本不需要此模块 。
但是如果我遵循这个建议(在我的 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
Run Code Online (Sandbox Code Playgroud)
如果该模块被执行(我可以使用其他 SO 文章和之前给出的建议来尽可能地计算):
set (THREADS_PREFER_PTHREAD_FLAG ON)
find_package (Threads REQUIRED)
add_executable(my_app main.cpp)
target_link_libraries (my_app Threads::Threads)
Run Code Online (Sandbox Code Playgroud)
... 结果是一样的。
THREADS_FOUNDistrue和CMAKE_USE_PTHREADS_INITis 1,但我没有-pthread编译,或-lpthread链接期间。我检查了模块中提到的一些其他变量,我尝试的所有变量都没有设置。
有没有正确的方法来做到这一点?或者我应该只使用正常的标志并继续我的生活?
小智 6
find_package( Threads )
target_link_libraries( ${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT} )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2238 次 |
| 最近记录: |