如何让CMake在Ubuntu上识别pthread
How to get CMake to recognize pthread on Ubuntu?
如果我直接用g++在命令行上编译,我可以看到我需要的一切都在那里:
$ g++ -pthread test.cpp
$ ldd a.out
linux-vdso.so.1 => (0x00007fffd05b3000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4a1ba8d000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4a1b870000)
...more...
然后我尝试为这个5行测试应用程序创建一个简单的cmake文件:
$ cat CMakeLists.txt
PROJECT ( Test CXX )
CMAKE_MINIMUM_REQUIRED ( VERSION 2.8 )
FIND_PACKAGE ( Threads REQUIRED )
ADD_EXECUTABLE ( test test.cpp )
TARGET_LINK_LIBRARIES ( test ${CMAKE_THREAD_LIBS_INIT} )
然而,我不明白为什么CMake找不到它需要使用的Threads
:
$ cd build/
$ cmake ..
CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE):
Could NOT find Threads (missing: Threads_FOUND)
Call Stack (most recent call first):
/usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-2.8/Modules/FindThreads.cmake:166 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
CMakeLists.txt:4 (FIND_PACKAGE)
-- Configuring incomplete, errors occurred!
哦,这是一个痛苦!我大概在这上面浪费了2个小时。解决方案如下:
CMake使用简短的"C"应用程序来测试/尝试事物。如果CMakeLists.txt声明项目使用c++,而没有列出C,那么一些简短的测试错误地失败了,然后cmake认为没有找到这些东西。
解决方案是改变CMakeLists的第一行:
PROJECT ( Test CXX )
…包含C作为一种语言:
PROJECT ( Test C CXX )
然后删除build
,重新创建它,然后一切都工作了:
rm -rf build
mkdir build
cd build
cmake ..
相关文章:
- 提升 ASIO 无法识别计时器对象
- 从udp接收帧对于人脸识别来说太慢
- 模板类无法识别友元运算符
- std::visit无法识别类型
- 无法识别模板功能
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 如何在LLVM中dyn_cast以识别StoreInst?
- 从不同的附加依赖项中识别等同命名的函数
- C++出现控制台错误.我无法识别源代码的问题
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- Qt:"Q3DScatter"即使包含在内也无法识别
- 使用指针的类识别
- 如何静态识别动态堆分配?
- 为什么C++无法识别我的对象实例化?
- C++ 无法识别创建进程'telnet'
- 识别 2D 矢量C++中的位置
- 在 c++11 中为 pthread 设置调度参数
- 如何识别项目是 QT 中的文件还是文件夹
- 如何让CMake在Ubuntu上识别pthread
- 为什么我的任何 pthread 函数都无法被 g++ 或 clang 识别?