【问题标题】:g++ and c++0x specification supportg++ 和 c++0x 规范支持
【发布时间】:2011-02-09 11:45:55
【问题描述】:

虽然有人说g++中对c++0x新特性的支持处于实验模式,但许多gcc开发者声称你可以在你的代码中使用大部分新特性并让程序运行。

但是当我尝试编译这个简单的程序时,它会导致分段错误。为什么?

#include <thread>
#include <iostream>

void my_thread_func()
{
    std::cout<<"hello"<<std::endl;
}

int main()
{
    std::thread t(my_thread_func);
    t.join();
}

g++ -std=c++0x -Wall -o run main.cc

【问题讨论】:

  • 你用的是什么版本的gcc?
  • 作为一个没有沉浸在 C++ 中的人,线程对象通过构造隐式启动的方式令人惊讶:-)
  • 我正在检查 Microsoft VS 2010 中的 C++0x 功能。它们支持以下几种功能:自动关键字和类型推断、lambdas、decltype()、nullptr、用于在线程之间传递异常的 exception_ptr、static_assert ()、右值引用和移动构造函数/赋值运算符和完美转发。还有模板类 std::unique_ptr、std::shared_ptr 和其他相关的。但是,尚不支持#include 和 std::thread。这是非常令人失望的,因为使用 C++0x 标准在 VC2010 和 g++ 上编写可移植线程代码本来会很好。

标签: c++ gcc g++ c++11


【解决方案1】:

我将可执行文件与 pthread 库链接起来,它工作了!我没有看到任何丢失的共享库依赖项 (ldd),但似乎 Linux 上的 std C++ 库实现在内部使用了 pthread。

g++ thread.cpp -o thread -Wall -std=c++0x -lpthread

【讨论】:

  • 天哪,我有多傻。感谢 Sumant,它适用于 -lpthread 开关
  • 我以为在g++中会有一个单独的c++0x线程实现,但正如你所说,它目前使用的是posix线程库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2012-09-24
  • 2014-11-05
  • 2010-10-14
  • 2010-09-21
  • 2011-03-16
  • 1970-01-01
相关资源
最近更新 更多