'螺纹'不是' std'的成员在GCC 4.8

时间:2014-09-20 17:46:03

标签: c++ c++11 stdthread

我正在为我当前的项目尝试一些c ++ 11线程支持但面临瓶颈。我使用rubenvb构建的gcc 4.8.0(直接从sourceforge下载)[x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb],发现它似乎不支持c ++ 11线程功能。以下代码无法编译并抱怨'thread' is not a member of 'std'。通过谷歌搜索,有一个4.7实验内置(也通过rubenvb)与std线程支持。作为我的主要项目的一部分需要4.8版本的其他C ++ 11功能,我还没有尝试4.7版本。请帮助澄清我下载的工具链是否支持线程。

平台:Window x64,Qt 4.8(使用下载的gcc工具链从源代码构建)

  • 由于Qt库是从源代码构建的,更改工具链意味着重新编译整个库集,这听起来对我不好。这两个文件或gcc都有错过吗?感谢。

更新:刚刚下载了实验4.8版本[x86_64-w64-mingw32-gcc-4.8-stdthread-win64_rubenvb]并编译了测试代码。所以现在的问题是

"'实验'版本安全使用?"

使用的测试代码

#include <iostream>
#include <thread>
#include <mutex> // try other c++11 threading feature

void doSomeWork( void ) { std::cout << "hello from thread..." << std::endl; }
int main() {
    std::mutex m; // also fail here
    std::thread t( doSomeWork );
    t.join();
    return 0;
}

使用makefile

CC       := g++
SRC      := test$(BUILD).cpp
OBJ      := $(SRC:.cpp=.o)
BIN      := test$(BUILD).exe
CXXFLAGS := -std=c++0x -Wall -Wextra -O0 -ggdb -lpthread -mthreads -pthread -Wno-unknown-pragmas

clean  :        ; del /a/s $(BIN) $(OBJ)
all    : $(BIN) ; del $(OBJ)
$(BIN) : $(OBJ) ; $(CC) $(CXXFLAGS) $^ -o $@
%.o    : %.cpp  ; $(CC) -c $(CXXFLAGS) $< -o $@
.PHONY: clean all

1 个答案:

答案 0 :(得分:2)

如果您使用的是win32,那么Mingw-Builds似乎有两种不同的线程模型:

  

Mingw-Builds(和实验性rubenvb软件包)也让你   在(lib)gcc:

内部使用的线程模型之间进行选择      

posix(基于MinGW-w64的winpthreads构建)“POSIX的实现   win32的线程也可以在实验目录下找到。

     
      
  • 它的主要目标是支持C ++ 11标准线程,它支持   目前只使用POSIX线程。“   http://mingw-w64.sourceforge.net/
  •   
  • 启用C ++ 11库功能   包含在头文件中,mutex和future中。
  •   
  • 性能   特定情况下的退化。 C ++ 11的功能是   显着慢于本机Win32实现甚至   MSVS2012的实施。
  •   
     

win32使用本机Win32线程   功能。

     
      
  • 没有C ++ 11主题,互斥锁或未来
  •   
  • 最佳表现
  •   

来源:http://qt-project.org/wiki/MinGW-64-bit