【问题标题】:Error when compiling gcc 4.6.1 C++0x threading code on MacOSX Lion在 MacOSX Lion 上编译 gcc 4.6.1 C++0x 线程代码时出错
【发布时间】:2011-12-01 17:34:56
【问题描述】:

编译以下代码时:

#include <iostream>
#include <thread>

using namespace std;

void hello()
{
        cout << "Hello World!" << endl;
}

int main()
{
        cout << "starting" << endl;
        thread t(hello);
        t.join();
        cout << "ending" << endl;
        return 0;
}

使用:

$ g++-4.6.1 -std=c++0x -pthread threading.cpp

我收到以下错误:

threading.cc: In function ‘int main()’:
threading.cc:13:2: error: ‘thread’ was not declared in this scope
threading.cc:13:9: error: expected ‘;’ before ‘t’
threading.cc:14:2: error: ‘t’ was not declared in this scope

这是在 MacOSX Lion 上使用自定义构建的 gcc 4.6.1。对 gcc 4.6 有效的所有其他 c++0x 功能就像一个魅力。这是 MacOSX 特有的错误吗?

【问题讨论】:

  • 我不知道发生了什么,但我知道我从不使用 -pthread;相反,我在编译器选项的末尾(!)使用-lpthread
  • 它可能仍在std::tr1 中。 4.6 发布时,C++11 尚未正式发布。
  • 我在这里可能弄错了,但是 -pthread 不是在 posix 线程中链接吗?这不是您的项目所需要的。
  • 忽略,thread 似乎不是在 std::tr1 开头。我不确定它是否在 4.6 中实现。他们的库支持页面仅适用于 SVN 结帐,而不是特定版本。 gcc.gnu.org/onlinedocs/libstdc++/manual/…
  • 当我遵循本指南时它在 linux 中工作:blog.scalebit.com/2011/04/… 但我无法让它在 osx lion 中工作。

标签: c++ macos gcc c++11


【解决方案1】:

std::thread(以及 C++11 线程库的其余部分)仅适用于 gcc 4.6.1 支持的部分平台。不幸的是,MacOSX 不是这些平台之一。

我的商业 Just::Thread 库为带有 gcc 4.5 的 32 位 MacOSX 提供 C++11 线程工具,但尚不支持 gcc 4.6。

【讨论】:

  • 谢谢。我在哪里可以获得有关支持哪些内容以及在哪些平台上的此类信息?如果我从源存储库构建最新版本,您认为 std::thread 是否可用?
【解决方案2】:

请参阅http://gcc.gnu.org/PR50196 - Mac OS X 不支持我们所依赖的 pthread 的某些部分。构建最新版本无济于事,但它可能已针对 GCC 4.7 修复

【讨论】:

  • 谢谢。现在我要跟踪一个错误。
  • 我已经关闭了该错误作为修复 - 您的示例代码应该在 GCC 4.7 中工作
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 2011-01-22
相关资源
最近更新 更多