Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MinGW error: ‘thread’ is not a member of ‘std’

I'm trying to cross-compile for Windows a simple application:

#include <thread>

void Func(){
  return;
}

int main(){
  std::thread thr1(Func);
  thr1.detach();
  return 0;
}

And that's what I get:

$ i686-w64-mingw32-g++ -static-libstdc++ -static-libgcc -pipe -g -std=c++0x ./threadstutor.cpp 
./threadstutor.cpp: In function ‘int main()’:
./threadstutor.cpp:8:3: error: ‘thread’ is not a member of ‘std’
./threadstutor.cpp:8:15: error: expected ‘;’ before ‘thr1’
./threadstutor.cpp:9:3: error: ‘thr1’ was not declared in this scope

Actually, this code have no such problem if compile with g++ for Ubuntu; but I need to cross-compile for Windows, and here I'm stuck.

like image 530
Hi-Angel Avatar asked Jan 19 '14 01:01

Hi-Angel


2 Answers

This error means that the STL you are using does not contain all the features of C++11.

To access C++11 threads in Windows, you will need a build of Mingw with posix-threads. Here you can find Mingw-Builds v4.8.1: http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.8.1/64-bit/threads-posix/sjlj/

like image 55
Sergey K. Avatar answered Nov 02 '22 05:11

Sergey K.


There is already a better option: https://github.com/meganz/mingw-std-threads This is a lightweight win32 native implementation of the most used threading and synchronization C++11 classes for MinGW. These are implemented in a header-only library that can co-exist with the system libs. It supports Windows XP as well, which does not have a direct analog of conditional variables.

like image 43
Alexander Vassilev Avatar answered Nov 02 '22 05:11

Alexander Vassilev