簡體   English   中英

std :: thread在cygwin中起作用,但在MinGw中不起作用

[英]std::thread works in cygwin but not in MinGw

所以我決定今天嘗試一下c ++。 我下載了MinGw及其隨附的g ++編譯器。 我決定測試以下代碼:

#include <iostream>
#include <thread>

int foo()
{
    std::cout << "foo" << std::endl;
}

int main()
{
    std::thread t1(foo);
    t1.join();
    std::cout << "done" << std::endl;
    return 0;
}

然后,我嘗試使用以下行在命令行上對其進行編譯:

g++ -std=c++11 main.cpp

哪個適用於世界。 但是這次,它給了我這個錯誤:

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

我使用cygwin提供的g ++嘗試了完全相同的代碼,並且可以正常工作。 那么,為什么它在MinGw中不起作用? 是過時的還是什么? 我想像在cygwin終端上一樣使用c ++ 11和c ++ 14編譯東西,但是在cygwin環境之外。

如果要使用std::thread ,則需要使用posix線程支持編譯MinGW-w64(或Windows上的GCC),大概是您下載了帶有本機Windows線程的構建。

查看針對64位32位的mingw-builds文件夾,並選擇帶有posix線程的版本。 您還需要選擇異常處理方法,如果您沒有其他選擇的理由,則堅持使用GCC的默認值seh(64位)和dwarf(32位)。

我在linux(交叉編譯)中對此進行了測試。

這樣可以編譯,

i686-w64-mingw32-g++-posix -std=c++11 threads.cpp -lwinpthread

這不

i686-w64-mingw32-g++-win32 -std=c++11 threads.cpp -lwinpthread

編譯器之間的區別是--enable-threads=win32與構建編譯器時使用的--enable-threads=posix選項。 g++ -v應該顯示使用了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM