collect2: error: ld returned 1 exit status
해당 코드를 실행하려고 하니 Pthread_create를 찾을 수 없다고 나온다.
분명 "csapp.h" 을 제대로 include 했는데... 링커는 이를 찾을 수 없다고 합니다ㅠ.
#include "csapp.h"
를 한다는 것이 만능은 아니다. include를 하는 것은 컴파일러에게 function의 signatures(함수 이름, 리턴 타입, 매개변수 타입 등등)을 알려주는 것이며, 실제 구현된 코드를 제공하는 것은 아닙니다.
pthread 라이브러리는 standard C library가 아니기 때문에(즉 외부 라이브러리), linking phase에서 개별적으로 Linking을 해주어야 합니다.
컴파일 할 때, 컴파일러는 우리의 소스코드를 기계어로 번역합니다. 이 때, 컴파일러는 위에서 언급한 signatures(함수 이름, 리턴 타입, 매개변수 타입 등등)를 알아야 합니다. 그러나 실제 구현 코드가 이 시점에 필요한 것은 아닙니다! (linking phase 때 필요합니다.)
ld error가 이 시점에서 발생한 것 입니다! 링커가 실제로 구현된 함수들을 찾을 수 없어서 에러를 나타는 것 이였습니다!
GNU 컴파일러를 호출합니다.
목작 파일의 이름을 명시합니다
우리의 소스파일 입니다
csapp.c에서 컴파일 된 목적파일 입니다. 이렇게 목적 파일을 명시함으로써 실행 가능한 파일을 만들 때 csapp.o를 추가하게 됩니다.
pthread
라이브러리가 linked 되는 것을 명시하며, -l
은 링커에게 즉시 이것을 포함시키도록 명령합니다.
결과적으로 gcc -o sharing sharing.c csapp.o -lpthread
옵션으로 컴파일하게 되면 정상적으로 동작하게 됩니다!