Ich versuche nur ein Konzept von g ++ zu verstehen. Hier ist meine sehr einfach std :: thread Anwendung:g ++ - Warum muss ich die Option "-thread" übergeben, während ich std :: thread verwende?
#include <iostream>
#include <thread>
void func() {
std::cout << "Running..." << std::endl;
}
int main()
{
std::thread t(func);
t.join();
return 0;
}
Ich kann es mit folgendem Befehl auf Mac OS/Xcode 9.0 Setup kompilieren:
g++ main.cpp -std=c++11
Aber ich bin nicht in der Lage, es zu kompilieren auf Linux mit dem gleichen Befehl, so weit ich weiß muss ich auch -pthread
Option übergeben. Ansonsten gibt es mir folgende Fehlermeldung:
gcc Version 7.1.1 20.170.622 (Red Hat 7.1.1-3)
main.o: In function `std::thread::thread<void (&)()>(void (&)())':
/usr/include/c++/5/thread:137: undefined reference to `pthread_create'
Ich denke, es ist unlogisch und ich sollte nicht einmal wissen, dass es die Umsetzung ist Std :: Thread-Klasse über Pthread. Warum muss ich -pthread
Option und Link gegen Pthread-Bibliothek übergeben? Soll mich C++ 11 nicht von plattformspezifischen Details abstrahieren? Oder habe ich noch andere alternative Bibliotheken wie pthread, die ich für meine std. :: thread usage verlinken kann? Oder sollte ich das als Fehler melden?
Danke.
Mit einer modernen Version von GCC sollten Sie dies nicht tun müssen - was ist Ihre GCC-Version? –
C++ 11 oder eine andere Version gibt nicht an, wie Sie mit den Complier/Tools interagieren. Sie müssen nur akzeptieren, dass Sie auf manchen Plattformen den Compiler mit bestimmten Flags aufrufen müssen, wenn Sie bestimmte Funktionen benötigen. – nos
@NeilButterworth gcc-Version 7.1.1 20170622 (Red Hat 7.1.1-3) –