MinGW und std::thread

So, ich habe versucht, den folgenden code zu kompilieren und laufen auf Windows mit einer MinGW-compiler.

#include <iostream>
#include <thread>

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

int main()
{
    std::thread t(test);
}

Ich bin das kompilieren mit folgendem Befehl:

g++ -std=c++11 test.cpp -o test.exe

Nun das problem ist die version von MinGW sollte man Sie nutzen und ich habe versucht, über alle Versionen, die ich kenne.

  1. MinGW-builds: thread-win32
  2. MinGW-builds: thread-posix
  3. MinGW-w64: stdthread experimentellen rubenvb
  4. MinGW-w64: stdthread experimentellen rubenvb 4.7

Nummer 1 funktioniert nicht, da GCC anscheinend unterstützt nur pthread Zeug intern.

Nummer 2 nicht kompilieren und es im wesentlichen auch Ausgänge test (siehe die Letzte Zeile der Ausgabe), aber es auch zu Abstürzen mit der Fehlermeldung:

terminate called without an active exception

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
test

Nummer 3 und 4 wieder tun, kompilieren, aber Sie nicht ausgeben test und stattdessen sofort abstürzt, sondern mit einer mehr beschreibenden Ausgabe:

terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Google brachte mich natürlich zu der GCC bug-tracker und einige andere Beiträge, die vorgeschlagen, um zu verwenden -pthread, die überhaupt nicht helfen.

Ich habe auch versucht manuell die Verknüpfung gegen winpthread und pthread, aber das macht nichts.

Es gibt auch keinen Unterschied zwischen -std=c++11 und -std=gnu++11...

Ich bin wirklich verloren und jetzt weiß nicht, ob es überhaupt möglich eine MinGW version, unterstützt std::thread, aber vielleicht bin ich auch nur mit Blick auf einige compiler flags. Ich hoffe jemand da draußen kann mir helfen!

Stunden damit verbracht, eine Lösung zu finden, schließlich Punkt 2 hat geklappt! Danke!

InformationsquelleAutor Lukas | 2013-03-30

Schreibe einen Kommentar