C++ 0x"Hello Concurrent World"会立即在g ++/linux上发生段错误吗?

Val*_*ron 10 c++ linux multithreading c++11

浏览C++ 0x书中的货币并认为我会给出示例代码.它是基本的.

#include <iostream>
#include <thread>

void hello()
{
    std::cout<<"Hello Concurrent World\n";
}


int main(int argc, char *argv[])
{
    std::thread t(hello);

    t.join();
}
Run Code Online (Sandbox Code Playgroud)

编译:

g++ -std=c++0x -g -o pgm pgm.cpp
Run Code Online (Sandbox Code Playgroud)

热潮:

Program received signal SIGSEGV, Segmentation fault.
_dl_fixup (l=0x7ffff7b0992c, reloc_arg=<value optimized out>) at ../elf/dl-runtime.c:147
147     ../elf/dl-runtime.c: No such file or directory.
        in ../elf/dl-runtime.c
Run Code Online (Sandbox Code Playgroud)

似乎是某种设置/库问题.有人熟悉这个吗?

nos*_*nos 20

您需要使用-pthread标志编译/链接.

  • C++实现不应该处理这个细节吗?否则,有std :: thread有什么用? (7认同)
  • @Neil:你最近变得非常脾气暴躁:"我不喜欢提升,新标准就是废话等等,"我不知道是不是因为年老或者别的什么,但你应该得到生命或退休. (7认同)
  • @Duck:问题是编译器.我使用stdio和stdlib,编译器非常智能,可以提供必要的代码,以便在运行时静态链接它们或者在运行时对它们进行dyn-link,而不必显式链接或加载它们.一旦gcc得到他们的行为,它也将是相同的,所以缺点是它不是c ++ 0x的错,而是编译器的实现,而老脾气暴的民众不应该对进步不屑一顾. (4认同)
  • @Neil Butterworth:C++ 0x仍然是g ++的实验性扩展我打赌当g ++正式支持新标准时,他们将修复所有错误但是现在我认为可能值得填写错误报告gcc团队. (4认同)
  • @dman - 除了感觉到的厌恶倾向之外,我认为尼尔对此是正确的.当语言声称"对"线程一无所知时,将pthread分开是一回事.线程是核心语言的一部分......不是那么多.当然,这就提出了如何处理的并行线程函数的一半做的问题 - 和他们在其他平台上的同行 - 你只能得到在与C++ 0x中通过函数native_handle()函数. (3认同)
  • @Neil Butterworth:不要制作单个编译器标志的戏剧.当然,标准库不应该需要额外的标志,但是`std :: thread`不是标准的(还没有).一旦C++ 0x及其实现是最终的,事情可能并且很可能会改变.目前,您可能不会使用`std :: thread`,但是您只需要其他标志来启用TBB或OpenMP等替代品.编译器和链接器标志是必要的邪恶,所以试着与它相处... (3认同)