allegory
allegory

Reputation: 124

C++11, GCC 4.8.1,Code::Blocks, threading, what a head ache

--EDIT If you would like to use MinGW GCC 8.4.1 and threads/mutex/futures/atomics do not download the Win32 threader version insted download the Posix version. --EDIT

My installation of MinGW is as follows: x32-4.8.1-release-win32 (as the threader) - sjlj rev 5

I have unpacked and correctly confirmed that MinGW GCC 4.8.1 (revision 5) is installed in C:\MinGW\mingw32. I have set up Code Blocks to look for the latest and greatest compiler in the correct path (this I am sure of). I can compile a normal program using #include iostream. Ok now when I try and run a program using #include thread it gives me "error: 'thread' is not a member of 'std'".

Now here is what I have done and what I have tried:

I am following a sort of template or tutorial here at cplusplus.com.
I have the code exactly as it is presented on the webpage (towards the bottom).
I have tried, in Code Blocks, to use Compiler flags "Have g++ follow the C++11 ISO language standard -std=c++11".

I have also tried the flag "Have g++ follow the coming C++0x ISO language standard -std=c++0x"

I have tried both at the same time and one at a time, no mas. I have also tried those commands manually.

Another command I tried manually was -std=gnu++11 which was recommended in the thread header.


--EDIT It seems like __cplusplus is < 201103L which is stated (or rather defined) in the thread header. This only happens when I manually use -std=c++11, for some reason C::B removes it if it was manually stated so I must use a check box to use this flag... --EDIT

My compiler settings under the Toolchain Executables tab are as follows:

C compiler: i686-w64-mingw32-gcc-4.8.1.exe

C++ compiler: i686-w64-mingw32-c++.exe

Linker for dynamic: i686-w64-mingw32-c++.exe

Linker for static: ar.exe

Debbuger: GDB/CDB debugger: default

Resource compiler: windres.exe

Make Program: mingw32-make.exe

I have tried using other executables in the bin folder and still no luck... I'm starting to wonder if GCC supports C++11 or threading !?

Has anyone been able to get threads to work with MinGW GCC, Code blocks or in general? If so how did you do it? Any links that might help? Any advice?

P.S. I know there are other ways of threading like posix or other SDK's like SFML (I have successfully tried threading with this). But I want to use GCC threading and I'm quite baffled as to why it is so hard to do seeing as all the necessary files are there...

--EDIT I have found that when I manually compile the program outside of Code Blocks I still get the same errors, whether I use g++ c++ or i686-w64-mingw32-g++/c++

here is the command I run to build the files:

C:\MinGW\mingw32\bin>g++.exe -D__GXX_EXPERIMENTAL_CXX0X__ -o0 -g3 -Wall -c -fmes sage-length=0 -std=c++11 -Wc++11-compat -o obj\Debug\main.o "F:\C Projects\Code Blocks\thread\main.cpp"

still returns error: 'thread' is not a member of 'std'

Could this be a bad build? I will try other revisions... --EDIT

Upvotes: 3

Views: 11622

Answers (4)

Jack10689
Jack10689

Reputation: 181

probably to late for an answere, but here is what worked for me:

1. Get x86_64-w64-mingw32-gcc-4.8-stdthread-win64_rubenvb.7z from:

http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/rubenvb/gcc-4.8-experimental-stdthread/

2. Setup a new compiler in codeblocks with

  • x86_64-w64-mingw32-gcc-4.8.1.exe
  • x86_64-w64-mingw32-g++.exe
  • x86_64-w64-mingw32-g++.exe
  • ar.exe
  • windres.exe
  • mingw32-make.exe

3. Set the new compiler for your project

  • Right click in your project -> build options
  • Select the new compiler
  • Under compiler falgs check -std=c++0x and -std=c++11
  • Under Other options set -std=gnu++11

4. Have fun with c++11 concurrency

Hope that works for you also, as an alternative you can just use visual studio.

Upvotes: 3

user2888809
user2888809

Reputation: 1

I had the same issues, I installed the lates MinGW-Builds

http://sourceforge.net/projects/mingwbuilds/files/mingw-builds-install/ and set my toolchain executables to:

x86_64-w64-mingw32-gcc-4.8.1.exe
x86_64-w64-mingw32-g++.exe
x86_64-w64-mingw32-g++.exe
ar.exe
windres.exe
mingw32-make.exe

I hope this helps.

Upvotes: 0

David G
David G

Reputation: 5784

gcc 4.8.1 is C++11 feature complete. I cannot speak to the Windows implementation but certainly on Linux and OS X it works as advertised, including all the concurrency functionality. I just #include <thread> and call g++ -std=gnu++11 and it works. Here's a minimal piece of code that compiles just fine:

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mx;
int i;

void thrfunc();

int main(void)
{
   i=0;
   std::thread          thr1(thrfunc),thr2(thrfunc);

   thr1.join();
   thr2.join();

   return 0;
}

void thrfunc()
{
   mx.lock();
   i++;
   std::cout << std::this_thread::get_id() << " i: " << i << std::endl;
   mx.unlock();
}

Upvotes: 0

Iuri Covalisin
Iuri Covalisin

Reputation: 645

I think you meant GCC 4.8.1 - the answer is yes, it supports a set of C++11 features including partial multi-threading support. Please visit http://gcc.gnu.org/releases.html to see supported set.

Upvotes: 0

Related Questions