[c언어] pthread.h 헤더 파일을 사용한 thread구현 질문
글쓴이: gyxor / 작성시간: 수, 2004/03/31 - 11:05오전
#include<stdio.h> #include<pthread.h> int sum; void *runner(void *param); main(int argc, char *argv[]){ pthread_t tid; pthread_attr_t attr; if(argc !=2){ fprintf(stderr, "usage: a.out < interger value > \n " ); exit(); } if( atoi(argv[1]) < 0){ fprintf(stderr,"%d must be >= 0\n",atoi(argv[1]) ); exit(); } pthread_attr_init(&attr); pthread_create(&tid,&attr,runner,argv[1]); pthread_join(tid,NULL); printf("sum = %d\n",sum); } void *runner(void *param) { int upper = atoi(param); int i; sum = 0; if(upper > 0){ for(i=1;i<=upper;i++) sum += i; } pthread_exit(0); }
유닉스상에서 컴파일을 해봤습니다.
> cc test.c -o test.out ld: Unresolved: pthread_attr_init __pthread_create __pthread_join __pthread_exit > test.out name1 test.out: Permission denied. >
thread구현 소스입니다.
그대로 쳐서 unix에서 컴파일후에 실행해봤습니다.
그런데 permission denied 가 나옵니다.
무엇이 잘못됐는지 모르겠습니다.
답변해주시면 부탁드립니다.
ps : 윈도우 상에서 해보려고 pthread.h파일을 찾으려고 해봤는데요..
아직 못찾았습니다. 혹시 pthread.h파일 다운받는곳 아시면 알려주시면
감사하겠습니다.
Forums:
unix라 함은... solaris를 말하는 건가요? hp-ux?
unix라 함은... solaris를 말하는 건가요? hp-ux?
cc test.c -o test.out -lpthread
이렇게 한 번 해보심이...
Re: [c언어] pthread.h 헤더 파일을 사용한 thread구현 질문
맹고이님 말씀대로 일단 '-lpthread'를 넣어주셔야겠습니다. (그런데, 이거 Linux 말고 다른 Unix에서도 마찬가지인가요?)
그리고 쉘 프롬프트에 쓰신 실행 명령을 보니 test.c를 컴파일/링크해서 나온 (안 나왔을 것 같지만 만일 나왔다고 해도) 실행 파일을 실행시키신게 아니라, 혹시 PATH에 들어있는 어떤 다른 'test.out'을 실행시키신게 아닐까 싶습니다. PATH에 '.'를 지정해두신게 아니라면 실행 권한이 없는 엉뚱한 test.out이었을 가능성이 높겠습니다.
일단 -lpthread로 컴파일하신 후 다음과 같이 './'를 붙여서 실행해보시기 바랍니다. 그리고, 테스트용 소스나 파일 이름으로 'test*'를 쓰시는 것은 별로 좋지 않을 것 같습니다. man test 해보셔요.
--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!
^^
Unix OSF/1 v.4.0d 이거였습니다.
-lpthread 이 옵션 때문이었군요..
해보니 정상 실행되었습니다.
답변감사합니다.
예~~~~전 질문이지만
혹시 저처럼 검색하다가 들어오신 분을 위해 덧글답니다.
윈도우즈 vc++ 에서 pthread.h 사용하는 방법이 아래 블로그에 나와있습니다.
http://taycleed.tistory.com/97
유입 로그 보다가 kldp가 보여서 들어와봤더니..
유입 로그 보다가 kldp가 보여서 들어와봤더니..
나중에 제가 보려고 남긴 게 도움이 되었다니 신기하네요. ㅎㅎ
댓글 달기