大致上是参照
这篇文章完成的, 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
#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测试代码检测, 测试通过, 大功告成