Gcc의 -pthread 옵션을 켜줘야하는 이유?

안녕하세요, APUE책의 멀티 쓰레드 단원을 공부하고 있는데

이상하게 pthred.h를 인클루드 해주었음에도 불구하고

gcc로 컴파일하면 pthread_create가 없는 함수라면서 에러가 뜨더라구요…

구글링 결과 gcc에 -pthread라는 flag를 붙여줘야한다는 사실을 알고, 해보니깐 잘 되더라구요

왜 궂이 pthread.h를 인클루드 해줘도 -pthread를 켜줘야하는지 궁금합니다.

include 하는 것은 컴파일 시에 필요한 것이고, 라이브러리 링크에서는 영향을 주지 못합니다.

pthread_create 함수가 있다는 것만 알기 때문에 컴파일을 됩니다. 그러나 실제 그 함수를 실행하는 곳이 어디 있는지 모르기 때문에
이를 연결해주는 링커에게 pthread 라이브러리를 사용한다고 알려주어야 합니다.

그래서 씁니다 :D

참고로, 원래 라이브러리 링커 옵션은 -lpthread과 같이 사용을 하는데, -pthread 옵션도 이와 비슷한 기능을 한다고 합니다.

Visual Studio에서도 확장 라이브러리를 쓸때는 include를 했더라도 Link 옵션에서 라이브러리 이름을 넣어줘야 링크가 되죠. :D

앞서분들이 잘 설명해 주셨네요.

무식하고 덕스럽게 이야기 하자면…

pthread.h 헤더는 ‘건담 조립 설명서 일부’ 같은거고…
pthread 라이브러리는 ‘건담 부품 쪼가리’ 같은거라서…

빌드 했을때, 라이브러리 없다는 에러가 출력되는거는 다음과 같이 해석됨


조아써! 이제 건담 만든다! 만든다! 만든…
건담 조립 설명서에는 A 파트가 나와 있는데… 부품 쪼가리가 없자나!!!

라는 에러를 출력하는거임;;