Итак, я пытался получить следующий код для компиляции и запуска в Windows с помощью компилятора MinGW.
#include <iostream>
#include <thread>
void test()
{
std::cout << "test" << std::endl;
}
int main()
{
std::thread t(test);
}
Я компилирую следующую команду:
g++ -std=c++11 test.cpp -o test.exe
Теперь проблема в версии MinGW, которую нужно использовать, и я пробовал обо всех версиях, о которых я знаю.
- MinGW-builds: thread-win32
- MinGW-builds: thread-posix
- MinGW-w64: stdthread experimental rubenvb
- MinGW-w64: stdthread experimental rubenvb 4.7
Номер 1 не работает, поскольку GCC по-видимому, поддерживает только файл pthread внутри.
Число 2 компилируется и, по сути, даже выводит test
(см. последнюю строку вывода), но также выходит из строя с ошибкой:
terminate called without an active exception
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application support team for more information.
test
Число 3 и 4 снова скомпилируются, но они не выводят test
и вместо этого мгновенно выходят из строя, но с более описательным выходом:
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 support team for more information.
Google привел меня, конечно, в отслеживание ошибок GCC и некоторые другие сообщения, которые предложили использовать -pthread
, что не помогает на всех.
Я также попытался вручную привязать к winpthread
и pthread
, но это тоже не делает.
Также нет разницы между -std=c++11
и -std=gnu++11
...
Я действительно потерялся прямо сейчас и не знаю, возможно ли получить версию MinGW, которая поддерживает std::thread
, но, возможно, я просто пропускаю некоторые флаги компилятора. Я надеюсь, что кто-то там может мне помочь!