2017-10-28 117 views
2

我只是想了解g ++使用的一個概念。在這裏我很簡單的std ::跟帖報名:g ++ - 爲什麼我必須在使用std :: thread時傳遞「-pthread」選項?

#include <iostream> 
#include <thread> 

void func() { 
    std::cout << "Running..." << std::endl; 
} 

int main() 
{ 
    std::thread t(func); 
    t.join(); 
    return 0; 
} 

我可以用下面的命令編譯它在MacOS/Xcode的9.0設置:

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

但我無法編譯它Linux使用相同的命令,據我所知我也必須通過-pthread選項。否則,它給了我以下錯誤:

gcc版本7.1.1 20170622(紅帽7.1.1-3)

main.o: In function `std::thread::thread<void (&)()>(void (&)())': 
/usr/include/c++/5/thread:137: undefined reference to `pthread_create' 

我認爲這是不符合邏輯的,我不應該知道,它的實現std :: thread類通過pthread。爲什麼我必須通過-pthread選項並鏈接到pthread庫? C++ 11是否應該將我從平臺特定的細節中抽象出來?或者我有任何其他的替代庫,如pthread,我可以鏈接到我的std ::線程的用法?或者我應該將其報告爲一個錯誤?

謝謝。

+0

使用現代版本的GCC,你不需要這樣做 - 你的GCC版本是什麼? –

+2

C++ 11或任何其他版本不指定您如何與compler/tools進行交互。你只需要接受在某些平臺上,當你需要某些特性時,你需要用特定的標誌調用編譯器。 – nos

+0

@NeilButterworth gcc version 7.1.1 20170622(Red Hat 7.1.1-3) –

回答

0

pthread是使用操作系統特定調用的操作系統特定線程的行業標準。

std::thread是C++中的一個抽象,可以使用pthread或OS的本機線程來實現。但爲了讓它在儘可能多的操作系統上運行得更快,std-library的實施者可以在posix中實現它,因爲它們應該適合所有兼容的操作系統。

也有例外,某些窗口只有std-library改爲使用Windows原生線程。

相關問題