Tak więc próbuję uzyskać następujący kod do kompilacji i uruchamiania w systemie Windows przy użyciu kompilatora MinGW.MinGW i std :: thread
#include <iostream>
#include <thread>
void test()
{
std::cout << "test" << std::endl;
}
int main()
{
std::thread t(test);
}
Mam kompilacji za pomocą następującego polecenia:
g++ -std=c++11 test.cpp -o test.exe
Teraz problem jest wersja MinGW trzeba wykorzystać i próbowałem o wszystkie wersje znam.
- MinGW-buduje: thread-win32
- MinGW-buduje: thread-posix
- MinGW-W64: stdthread experimental rubenvb
- MinGW-W64: stdthread experimental rubenvb 4.7
numer 1 nie działa, ponieważ GCC apparently only supports pthread stuff wewnętrznie.
Numer 2 skompilować i to, że zasadniczo nawet wyjść test
(patrz ostatni wiersz wyjścia), ale też wywala się z błędem:
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
numer 3 i 4 ponownie nie kompiluje, ale don „wyjście t test
i zamiast natychmiast zawiesza, ale z wyjściem bardziej opisowy:
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 przyniósł mi oczywiście do GCC bug tracker oraz niektórych innych stanowisk, które zalecane, aby użyć -pthread
, który w ogóle nie pomaga.
Próbowałem również ręcznie linkowania przeciwko winpthread
i pthread
, ale to też nic nie robi.
Jest też żadnej różnicy pomiędzy -std=c++11
i -std=gnu++11
...
Jestem naprawdę stracił już teraz, a nie wiem, czy jest to w ogóle możliwe, aby uzyskać wersji MinGW, który obsługuje std::thread
, ale może ja właśnie wychodzę z niektórych flag kompilatora. Mam nadzieję, że ktoś tam może mi pomóc!
Godziny spędzone na znalezienie rozwiązania, w końcu punkt 2 działał! Dzięki! – Massimo