저는 g ++에서 사용되는 개념을 이해하려고합니다. 여기 내 아주 간단한 표준 : : 스레드 응용 프로그램 :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;
}
나는 다음과 같은 명령을 사용하여 맥 OS/엑스 코드 9.0 설정에 컴파일 할 수 있어요
:
g++ main.cpp -std=c++11
하지만 그것을 컴파일 할 수 없어요 같은 명령을 사용하는 리눅스는 내가 아는 한 -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'
: 그렇지 않으면 그것은 나에게 다음과 같은 오류를 제공합니다 pthread를 통한 std :: thread 클래스. -pthread
옵션을주고 pthread 라이브러리에 링크해야하는 이유는 무엇입니까? C++ 11이 플랫폼 특정 세부 사항에서 저를 추상화하지 않았습니까? 또는 pthread와 같은 다른 대체 라이브러리를 사용하여 std :: thread 사용을 위해 연결할 수 있습니까? 아니면 버그로보고해야합니까?
감사합니다.
최신 버전의 GCC를 사용하면이 작업을 수행하지 않아도됩니다. GCC 버전은 무엇입니까? –
C++ 11 또는 다른 버전에서는 사용자가 compler/tools와 상호 작용하는 방법을 지정하지 않습니다. 일부 플랫폼에서는 특정 기능이 필요할 때 특정 플래그로 컴파일러를 호출해야한다는 것을 받아 들여야합니다. – nos
@NeilButterworth gcc 버전 7.1.1 20170622 (Red Hat 7.1.1-3) –