답변:
-pthread
컴파일러에게 pthread 라이브러리에서 링크하고 스레드에 대한 컴파일을 구성하도록 지시합니다.
예를 들어 다음은 -pthread
Ubuntu 컴퓨터에 설치된 GCC 패키지 에서 옵션이 사용될 때 정의되는 매크로를 보여줍니다 .
$ 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
옵션을 사용해야합니다 .
참고 :이 -pthread
옵션은 GCC 문서에서 플랫폼 별 옵션으로 문서화되어 있으므로 항상 사용할 수있는 것은 아닙니다. 그러나 GCC 문서에 명시 적으로 나열되지 않은 플랫폼 (예 : i386 및 x86-64)에서 사용할 수 있습니다. 사용 가능한 경우 사용해야합니다.
또한 -pthreads
( -pthread
Solaris 2에 대한 동의어로 나열 됨 ) 및 -mthread
(i386 및 x86-64 Windows에서 MinGW 특정 스레드 지원용 )과 같은 다른 유사한 옵션이 GCC에서 사용되었습니다 . 내 이해는 GCC가 -pthread
앞으로 균일하게 사용하려고 노력하고 있다는 것입니다.
-lpthread
가 전체 POSIX 스레딩 라이브러리를 얻기에 충분 하도록 요구합니다 .
-lpthread
은 전체 POSIX 스레딩 라이브러리를 가져옵니다.
-lpthread
전체 pthreads 지원을 받기에 충분해야 한다고 말합니다 . 다른 컴파일 플래그는 필요하지 않습니다.
-lpthread
않지만 컴파일하는 -pthread
것이 불충분하다는 것입니다.
-lpthread
. 그러나 gcc 문서는 이것이 pthreads 지원을 받기에 충분하지 않을 수 있다고 제안합니다. 나는 당신이 제공하지 않거나 -lpthread
임의의 다른 독점 옵션을 제공하지 않으면 어떤 일이 발생하는지 전혀 신경 쓰지 않습니다 . 만 -lpthread
보증의 pthreads에 POSIX에 의해 지정되고 그 GCC와 충분한 것 같다하지 않습니다.
허용되는 대답이 있지만 IMO는 충분한 컨텍스트와 통찰력을 제공하지 않습니다. 따라서이 추가 답변.
-lpthread
더 이상 존재하지 않는 문제에 대한 해결책입니다 (~ 2005 년 이후).
예전에는 LinuxThreads 와 같이 POSIX와 호환되지 않는 Pthreads API 의 독점적 구현이있었습니다 . POSIX 표준은 단순히 POSIX 호환 동작을 원한다면 Pthreads API의 POSIX 호환 구현을 링크하는 데 필요한 링크 및 링크가 필요하다고 말합니다 .-lpthread
최신 운영 체제에는 Pthreads API의 다중 구현이 없습니다. 그리고 그것이 -lpthread
더 이상 어떤 목적도 제공하지 않는 이유 입니다.
컴파일러와 같은 gcc
과 clang
(와, 아마, 리눅스 호환 컴파일러)가 필요 하여 -pthread
모두 컴파일하고 POSIX 호환 멀티 스레드 애플리케이션을 연결하고 하나는 사용해야합니다 무엇에 대한 명령 줄 옵션을.
컴파일 시간에 -pthread
옵션은 Pthread API가 요청되었음을 명시하고 (예 : Solaris Threads와 같은 다중 스레딩 API가있을 수 있음) 플랫폼 별 매크로를 정의합니다 ( _REENTRANT
Linux에서 , _MT
Solaris에서).
링크 타임에 -pthread
POSIX 호환 Pthreads API 동작을 구현하는 필수 라이브러리 (있는 경우)의 링크.
위의 내용은 왜 -lpthread
필요하지도 충분하지도 않은지 명확하게 보여줍니다 .