맞아요.'pthread'.create'정의 되 지 않 은 참조

pthread 라 이브 러 리 는 Linux 시스템 의 기본 라 이브 러 리 가 아니 기 때문에 연결 할 때 라 이브 러 리 libpthread.a 를 사용 해 야 하기 때문에 pthread 를 사용 합 니 다.create 스 레 드 를 만 들 때 컴 파일 에-lpthread 인 자 를 추가 합 니 다gcc -o pthread -lpthread pthread.c

-------------------
http://yecheng110.blog.hexun.com/13030352_d.html
오늘부터 Liux 에서 C 로 다 중 스 레 드 프로그램 을 개발 하 는 것 을 배우 기 시 작 했 습 니 다.Linux 시스템 의 다 중 스 레 드 는 POSIX 스 레 드 인 터 페 이 스 를 따라 pthread 라 고 합 니 다.
#include 

int pthread_create(pthread_t *restrict tidp,
                   const pthread_attr_t *restrict attr,
                   void *(*start_rtn)(void), 
                   void *restrict arg);

Returns: 0 if OK, error number on failure
C99 에 restrict 수식 지침 이 새로 추가 되 었 습 니 다.restrict 수식 지침 은 최초 로 지침 이 가리 키 는 대상 을 액세스 하 는 유일한 방법 입 니 다.두 번 째 지침 이 첫 번 째 를 기반 으로 할 때 만 대상 을 액세스 할 수 있 습 니 다.대상 에 대한 접근 은 모두 restrict 에 의 해 수 정 된 포인터 표현 식 에 한정 되 어 있 습 니 다.restrict 에서 수식 하 는 지침 은 주로 함수 형 인삼 이나 malloc()에서 분 배 된 메모리 공간 을 가리 키 는 데 사 용 됩 니 다.restrict 데이터 형식 은 프로그램의 의 미 를 바 꾸 지 않 습 니 다.컴 파일 러 가 restrict 수식 지침 을 만 드 는 것 은 액세스 대상 의 유일한 방법 이라는 가설 을 통 해 특정한 유형의 루틴 을 최적화 시 킬 수 있다.
첫 번 째 매개 변 수 는 스 레 드 식별 자 를 가리 키 는 지침 입 니 다.
두 번 째 매개 변 수 는 스 레 드 속성 을 설정 하 는 데 사 용 됩 니 다.
세 번 째 매개 변 수 는 스 레 드 실행 함수 의 시작 주소 입 니 다.
마지막 매개 변 수 는 실행 함수 의 매개 변수 입 니 다.
아래 이 프로그램 에서 우리 의 함수thr_fn
매개 변수 가 필요 하지 않 기 때문에 마지막 매개 변 수 는 빈 포인터 로 설정 합 니 다.두 번 째 매개 변 수 는 우리 도 빈 포인터 로 설정 하면 기본 속성의 스 레 드 를 생 성 합 니 다.스 레 드 를 만 드 는 데 성공 하면 함수 가 0 으로 되 돌아 갑 니 다.0 이 아니라면 스 레 드 를 만 드 는 데 실 패 했 음 을 설명 합 니 다.흔히 볼 수 있 는 오류 반환 코드 는 EAGAIN 과 EINVAL 입 니 다.전 자 는 시스템 이 새로운 스 레 드 를 만 드 는 것 을 제한 합 니 다.예 를 들 어 스 레 드 수가 너무 많 습 니 다.후 자 는 두 번 째 매개 변수 가 대표 하 는 스 레 드 속성 값 이 불법 임 을 나타 낸다.스 레 드 를 만 드 는 데 성공 하면 새로 만 든 스 레 드 는 매개 변수 3 과 매개 변수 4 의 확실한 함 수 를 실행 하고 원래 의 스 레 드 는 다음 줄 코드 를 계속 실행 합 니 다.#include<stdio.h>
#include<pthread.h>
#include<string.h>
#
include<sys/types.h>
#
include<unistd.h>

pthread_t ntid;

void printids(const char *s){
pid_t pid;
pthread_t tid;

pid = getpid();
tid = pthread_self();
printf("%s pid %u tid %u (0x%x)
"
,s,(unsigned int)pid,(unsigned int)tid,(unsigned 
int
)tid);
}

void *thr_fn(void *arg){
printids("new thread:");
return ((void *)0);
}

int main(){
int err;

err = pthread_create(&ntid,NULL,thr_fn,NULL);
if(err != 0) {
printf("can't create thread: %s
"
,strerror(err));
return 1;
}

printids("main thread:");
sleep(1);
return 0;
}

APUE 2 의 프로그램 을 수정 한 후에 컴 파일 합 니 다.
결과 오류:
pthread.c:(.text+0x85): ‘pthread_create’

pthread 라 이브 러 리 는 Linux 시스템 의 기본 라 이브 러 리 가 아니 기 때문에 연결 할 때 라 이브 러 리 libpthread.a 를 사용 해 야 하기 때문에 pthread 를 사용 합 니 다.create 스 레 드 를 만 들 때 컴 파일 에-lpthread 인 자 를 추가 합 니 다:gcc -o pthread -lpthread pthread.c

좋은 웹페이지 즐겨찾기