我只是想了解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 ::線程的用法?或者我應該將其報告爲一個錯誤?
謝謝。
使用現代版本的GCC,你不需要這樣做 - 你的GCC版本是什麼? –
C++ 11或任何其他版本不指定您如何與compler/tools進行交互。你只需要接受在某些平臺上,當你需要某些特性時,你需要用特定的標誌調用編譯器。 – nos
@NeilButterworth gcc version 7.1.1 20170622(Red Hat 7.1.1-3) –