gcc로 pthread API 컴파일하기

삽질 기록 2018.10.30 21:59 Posted by 아는 개발자

왠만한 C 코드들은 'gcc 파일명' 명령어로 빌드가 가능한데 코드 안에서 pthread API를 사용하고 컴파일을 하면 아래와 같은 에러 메시지가 나온다.


kwony@kwony:~$ gcc thread.c


thread.c:(.text+0x79): undefined reference to `pthread_create'

thread.c:(.text+0xa9): undefined reference to `pthread_join'

collect2: error: ld returned 1 exit status


gcc 컴파일 스크립트에 디폴트로 pthread 라이브러리가 포함되지 않아서 발생하는 에러다. `-lpthread` 를 옵션으로 줘서 pthread 라이브러리를 포함시켜 빌드하면 해결 할 수 있다.


gcc thread.c -lpthread


아래 코드로 테스트를 해봤다.

#include <pthread.h>
#include <stdlib.h>
void *test(void *data)
{
}
int main()
{
    int a = 100;
    pthread_t thread_t;
    int status;

    if (pthread_create(&thread_t, NULL, test, (void *)&a) < 0)
    {
        perror("thread create error:");
        exit(0);
    }
    pthread_join(thread_t, (void **)&status);
    printf("Thread End %d\n", status);
    return 1;
}



  1. makerj (ohenwkgdj@gmail.com) 2019.08.13 00:26  댓글주소  수정/삭제  댓글쓰기

    gcc thread.c -lpthread 가 아니라 gcc -pthread thread.c 가 맞습니다.
    전자는 단순히 함수를 연결해 주는 것 뿐이지만, 후자는 스레드 모델을 pthread로 하겠다는 명확한 의미가 포함됩니다. 해당 코드를 리눅스에서만 사용한다면 차이가 없겠지만, 다른 OS에서도 사용하게 된다면 반드시 필요한 설정입니다.