在 Cygwin 下使用 C++ 标准线程库

本文介绍了如何在Cygwin环境下使用C++标准线程库,主要针对gcc4.6版本。在升级gcc后,由于std::thread未定义,需要添加特定宏定义。同时,由于_cygwin中的pthread库与Linux不同,不支持_pthread_mutex_timedlock,需要去掉相关宏。通过编译并链接mutex.cc、atomic.cc、conditional_variable.cc和thread.cc等文件到libstdc++.a中,解决了未实现函数的问题,最终实现std::thread的正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大致上是参照 这篇文章完成的, gcc的版本是gcc4.6
懒的打字, 我就稍微引用一下原文吧;
首先是环境,gcc 4.6用的 C++ 库是 libstdc++ v3,这个库的完整代码包含在 gcc 代码里,我这里使用的是在 Cygwin中升级GCC中提供的gcc地址: ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/
1. 升级完gcc后发现对C++0x支持基本正确, 不过测试线程库时发现无法编译通过, 显示std::thread未定义, goolge了一下发现需要添加如下宏定义: 
#ifdef __GXX_EXPERIMENTAL_CXX0X__
  #define _GLIBCXX_HAS_GTHREADS 1
  #define _GLIBCXX__PTHREADS 1
  //#define _POSIX_TIMEOUTS=1
 #endif
注意这里与MinGW的不同, _POSIX_TIMEOUTS这个宏定义在cygwin下是不需要的, 因为如果添加的话会显示pthread的函数pthread_mutex_timedlock未定义, 查了一下发现cygwin中的pthread.h不存在该函数, 这个函数是存在于pthread-win32库中的, cygwin模拟的是Linux下的环境, pthread的库也是对应于Linux下的, 因此没有该函数, 去掉该宏, 继续编译
2. 接下来报出另外一个错误, std::thread中有函数未实现, 无法连接, 这里参照在 MinGW 下使用 C++ 标准线程库的第3点, 编译好mutex.cc, atomic.cc, conditional_variable.cc(ps: gcc4.6中没有找到), thread.cc后, 用ar工具打包到libstdc++.a中, 问题解决(原先我是用ar工具直接把这几个.o文件打包成一个lib, 测试通过后才打包进的libstdc++)
3. 随便找个std::thread测试代码检测, 测试通过, 大功告成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值