そのため、MinGW コンパイラを使用して、次のコードをコンパイルして Windows で実行しようとしました。
#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 ビルド: thread-win32
- MinGW ビルド:スレッド posix
- MinGW-w64: stdthread の実験的な rubenvb
- MinGW-w64: stdthread 実験的 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's 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's support team for more information.
もちろん、GoogleはGCCバグトラッカーと他のいくつかの投稿に私を連れてきて、使用を提案しましたが-pthread
、まったく役に立ちません。
winpthread
とに対して手動でリンクしようとしましpthread
たが、それも何もしません。
との間にも違いはありませ-std=c++11
ん-std=gnu++11
...
をサポートする MinGW バージョンを入手できるかどうかはわかりませんが、std::thread
コンパイラ フラグを見落としているだけかもしれません。誰かが私を助けてくれることを願っています!