2017-10-28 1 views
2

저는 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 사용을 위해 연결할 수 있습니까? 아니면 버그로보고해야합니까?

감사합니다.

+0

최신 버전의 GCC를 사용하면이 작업을 수행하지 않아도됩니다. GCC 버전은 무엇입니까? –

+2

C++ 11 또는 다른 버전에서는 사용자가 compler/tools와 상호 작용하는 방법을 지정하지 않습니다. 일부 플랫폼에서는 특정 기능이 필요할 때 특정 플래그로 컴파일러를 호출해야한다는 것을 받아 들여야합니다. – nos

+0

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

답변

0

pthread은 OS 특정 호출을 통해 OS 특정 스레드보다 업계 표준입니다.

std::threadpthread 또는 OS의 원시 스레드를 사용하여 구현 될 수있는 C++의 추상화입니다. 하지만 가능한 한 많은 OS에서 작동하도록하려면 std-library 구현자는 posix에 구현할 수 있습니다. 모든 호환 OS를 실행하는 것이 좋습니다.

예외가 있지만 일부 창만 std-library은 Windows 기본 스레드를 대신 사용합니다.

관련 문제