首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::MacPorts gcc4.5中的线程

std::MacPorts gcc4.5中的线程
EN

Stack Overflow用户
提问于 2010-12-16 01:16:44
回答 2查看 1.9K关注 0票数 10

我正试图在Linux上编写一些软件,在我的Mac上使用一些漂亮的新C++0x功能。我使用MacPorts安装了gcc45包,它给了我/opt/local/bin/g++-mp-4.5,但是这个编译器不想在<thread>中编译任何东西。我试着编译:

代码语言:javascript
复制
//test.cpp
#include <thread>

int main()
{
std::thread x;
return 0;
}

并得到:

代码语言:javascript
复制
bash-3.2$ /opt/local/bin/g++-mp-4.5 -std=c++0x test.cpp 
test.cpp: In function 'int main()':
test.cpp:5:2: error: 'thread' is not a member of 'std'
test.cpp:5:14: error: expected ';' before 'x'

在/opt/local/include/gcc45 45/c++/线程中快速查看显示,已定义了std::线程类,但由以下内容保护:

代码语言:javascript
复制
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)

同样,这在我的Ubuntu机器上工作得很好,那么在c++0x 4.5 ( g++ -mp-4.5)的MacPorts版本下启用g++ <thread>库的正确方法是什么?否则,我还需要知道什么(配置标志等)吗?在我亲自编写gcc 4.5之前?

更新:--看起来SO社区对此不太了解,所以也许是时候靠近开发人员了。有谁知道我可以把这个问题转发给官方邮件列表吗?有什么礼仪建议可以帮我得到答案吗?

更新2: --我请求了另一个临时解决方案-- 这里,所以我现在只是将boost::线程库替换为std库。不幸的是,未来并没有提振::未来,所以这还不是一个完全的解决方案。任何帮助仍将是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-15 13:38:27

实际上,<thread>库在Mac下不起作用,因为这里的线程没有带超时的函数(例如,pthread_mutex_timedlock())。这个函数的可用性必须是使用已选中宏的_POSIX_TIMEOUTS宏,但是在MacOSX10.4、10.5和10.6中它被定义为-1 (我不知道10.7是什么),而在pthread.h中确实没有这些函数。

_POSIX_TIMEOUTS宏在libstdc++配置期间进行检查。如果检查成功结束,则定义_GLIBCXX_HAS_GTHREADS宏。<thread>含量随-std=c++0x的增加而增加。

libstdc++确实需要_POSIX_TIMEOUTS,例如在std::timed_mutex类实现中(参见<mutex>报头)。

总之,我认为当GCC的线程或libstdc++实现pthread_mutex_timedlock() (和其他)仿真,或者当这个函数将在Mac上实现时,Mac上就会出现libstdc++。

或者,在未来的C++标准中,可能会有一种方法来查询语言特性(例如,这个定时函数和类),并且可以在禁用此功能的情况下构建libstdc++。然而,我不太熟悉未来的标准,并且对这个特性有疑问。

票数 8
EN

Stack Overflow用户

发布于 2012-03-08 22:32:05

更新- gcc4.7现在允许编译on:看这里

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4456602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档