2014-04-23 6 views
73

멀티 스레드 프로그램을 컴파일하는 동안 사용되는 gcc -pthreadgcc -lpthread의 차이점은 무엇입니까?컴파일 중 -pthread와 -lpthread의 차이점

+2

죄송합니다. 올바른 복제본은 다음과 같습니다. http://stackoverflow.com/q/2127797/694576 – alk

+0

[컴파일시 -pthread 플래그의 의미] (https://stackoverflow.com/questions/2127797/gcc-significance-of) -pthread-flag-when-compiling) – jww

답변

87

-pthread은 스레드에 대한 컴파일을 구성 할뿐만 아니라 pthread 라이브러리에서 링크하도록 컴파일러에 지시합니다.

$ gcc -pthread -E -dM test.c > dm.pthread.txt 
$ gcc   -E -dM test.c > dm.nopthread.txt 
$ diff dm.pthread.txt dm.nopthread.txt 
152d151 
< #define _REENTRANT 1 
208d206 
< #define __USE_REENTRANT 1 

-lpthread 옵션을 사용하여 단지는 pthread 라이브러리가 링크되도록한다 :

예를 들어

는, 다음은 -pthread 옵션이 내 우분투 시스템에 설치되어 GCC 패키지에 사용됩니다 때 정의받을 매크로를 보여줍니다 - 사전 정의 된 매크로가 정의되지 않습니다.

최종선 : -pthread 옵션을 사용해야합니다.


참고 : -pthread 옵션은 GCC의 문서에서 특정 플랫폼 옵션으로 설명되어 있습니다, 그래서 항상 사용하지 못할 수 있습니다. 그러나 GCC 문서가 명시 적으로 나열하지 않는 플랫폼 (예 : i386 및 x86-64)에서 사용할 수 있습니다. 사용 가능한 경우 사용해야합니다.

는 또한 다른 유사한 옵션 및 -mthread (솔라리스 2 -pthread의 동의어로 나열) 등 -pthreads (I386 및 x86-64에 Windows에서는 MinGW 특정 쓰레드 지원), GCC에 의해 사용되어 있습니다. 나의 이해는 GCC가 -pthread을 계속적으로 사용하려고 시도하고 있다는 것이다.

+2

이것은 POSIX와 직접적으로 모순되기 때문에 이상합니다. POSIX는'-lpthread'를 넘겨 주면 전체 POSIX 스레딩 라이브러리를 얻을 수 있습니다. – fuz

+0

@FUZxxl'-lpthread'를 넘겨 주면 전체 POSIX 스레딩 라이브러리가 생성됩니다. – immibis

+3

@immibis 아뇨, POSIX는'-lpthread'로 링크하면 완전한 pthreads를 지원할 수 있다고 말합니다. 다른 컴파일 플래그는 필요하지 않습니다. – fuz

4

-pthread pthreads 라이브러리로 멀티 스레딩을 지원합니다. 이 옵션은 전처리 기와 링커 (man gcc)에 대한 플래그를 설정합니다. 연결하면서

-lpthread는 전처리 동안 영향이 없을 것입니다 존재에 오는 동안.