You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译时遇pthread宏错误__PTHREAD_SPINS未声明的解决求助

编译pthread代码时__PTHREAD_SPINS未定义错误的解决

问题背景

长期遭遇编译pthread相关代码时的宏错误,首次出现于编译新下载的库,已重装g++、gcc、build-essential和libc6,问题仍存在。以下是复现用的简化代码、构建配置、错误信息及系统环境:

复现代码

C++示例代码

#include <iostream>
#include <pthread.h>

int main() {
    pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;

    pthread_mutex_destroy(&m);

    std::cout << "Hello, World!" << std::endl;
    return 0;
}

CMakeLists.txt

project(clion_pthread)

set(CMAKE_CXX_STANDARD 14)

# Find the Threads package (this finds pthreads on UNIX)
find_package(Threads REQUIRED)

# Add your executable
add_executable(clion_pthread main.cpp)

# Link the executable to the Threads library
target_link_libraries(clion_pthread Threads::Threads)

错误信息

clion_pthread/cmake-build-debug --target clion_pthread -- -j 6
[ 50%] Building CXX object CMakeFiles/clion_pthread.dir/main.cpp.o
In file included from /usr/include/x86_64-linux-gnu/c++/9/bits/gthr-default.h:35,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/gthr.h:148,
                 from /usr/include/c++/9/ext/atomicity.h:35,
                 from /usr/include/c++/9/bits/ios_base.h:39,
                 from /usr/include/c++/9/ios:42,
                 from /usr/include/c++/9/ostream:38,
                 from /usr/include/c++/9/iostream:39,
                 from /clion_pthread/main.cpp:1:
clion_pthread/main.cpp: In function ‘int main()’:
clion_pthread/main.cpp:5:25: error: ‘__PTHREAD_SPINS’ was not declared in this scope
    5 |     pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~
make[3]: *** [CMakeFiles/clion_pthread.dir/build.make:76: CMakeFiles/clion_pthread.dir/main.cpp.o] Error 1
make[2]: *** [CMakeFiles/Makefile2:83: CMakeFiles/clion_pthread.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:90: CMakeFiles/clion_pthread.dir/rule] Error 2
make: *** [Makefile:124: clion_pthread] Error 2

系统环境

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.6 LTS
Release:    20.04
Codename:   focal

解决方法

  • 添加_POSIX_C_SOURCE宏定义:__PTHREAD_SPINS是依赖POSIX标准的内部宏,需显式启用POSIX特性。在CMakeLists.txt中添加:

    target_compile_definitions(clion_pthread PRIVATE _POSIX_C_SOURCE=200809L)
    

    或直接在代码<pthread.h>前添加:

    #define _POSIX_C_SOURCE 200809L
    
  • 调整头文件包含顺序:确保<pthread.h>在C++标准库头文件之前引入,避免标准库提前加载不完整的pthread相关内容:

    #include <pthread.h>
    #include <iostream>
    
  • 验证并修复pthread头文件:执行命令检查头文件是否包含目标宏:

    cat /usr/include/pthread.h | grep __PTHREAD_SPINS
    

    若无输出,说明头文件损坏,重新安装libc6-dev:

    sudo apt-get install --reinstall libc6-dev
    
  • 替换静态初始化宏:若上述方法无效,改用动态初始化替代PTHREAD_MUTEX_INITIALIZER:

    pthread_mutex_t m;
    pthread_mutex_init(&m, NULL);
    

内容的提问来源于stack exchange,提问作者Gil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:37:31