Windows平台Cygwin环境运行cmake缺失pthread_np.h报错求助
报错信息
Run Build Command(s):/usr/bin/ninja.exe cmTC_ff288 && [1/2] Building C object CMakeFiles/cmTC_ff288.dir/CheckSymbolExists.c.o FAILED: CMakeFiles/cmTC_ff288.dir/CheckSymbolExists.c.o /usr/bin/cc -fdiagnostics-color=always -Wextra -Wall -Wno-expansion-to-defined -Wno-psabi -Wno-misleading-indentation -Wno-maybe-uninitialized -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align -Wno-tautological-compare -fno-strict-aliasing -fno-exceptions -o CMakeFiles/cmTC_ff288.dir/CheckSymbolExists.c.o -c CheckSymbolExists.c CheckSymbolExists.c:2:10: fatal error: pthread_np.h: No such file or directory 2 | #include <pthread_np.h> | ^~~~~~~~~~~~~~ compilation terminated. ninja: build stopped: subcommand failed. File /cygdrive/f/gtkwebkit/webkitgtk-2.34.1/CMakeFiles/CMakeTmp/CheckSymbolExists.c: /* */ #include <pthread_np.h> int main(int argc, char** argv) { (void)argv; #ifndef pthread_main_np return ((int*)(&pthread_main_np))[argc]; #else (void)argc; return 0; #endif }
原因说明
该报错由WebKitGTK构建脚本的CMake自动检测逻辑触发:脚本检测pthread_main_np非标准POSIX接口时,默认引入了仅BSD/macOS平台存在的pthread_np.h头文件,Cygwin环境没有对应头文件导致检测失败。
修复方案
- 方案1:手动指定CMake检测结果跳过检测
执行cmake构建命令时追加如下参数,直接告知CMake该接口不存在,无需触发自动检测:
-DHAVE_PTHREAD_MAIN_NP=OFF
CMake的CHECK_SYMBOL_EXISTS检测宏的结果会缓存到对应HAVE_*前缀的变量中,手动指定变量值后会直接跳过自动检测步骤,不会生成临时检测文件。
- 方案2:创建适配用dummy头文件
在Cygwin系统头文件目录/usr/include下创建空的pthread_np.h文件,满足检测阶段的头文件查找需求:
touch /usr/include/pthread_np.h
如果后续构建阶段真的需要用到该头内的接口定义,可以在该文件内添加一行#include <pthread.h>,Cygwin的pthread标准头已经包含了大部分非标准pthread扩展的声明。
- 方案3:安装完整pthread开发组件
打开Cygwin安装器,搜索并安装全部libpthread-devel、pthread-devel相关组件,部分版本的Cygwin会把pthread_np.h打包在扩展开发组件中。
内容的提问来源于stack exchange,提问作者J.Titor.0
相关产品推荐
相关产品推荐

