최근에 XUbuntu 11.10 64 비트를 설치했지만 가장 간단한 pthread 예제를 컴파일하는 데 문제가 있습니다.
다음은 코드입니다. div id = “c39a1ecdd8″>
:
#include <stdio.h> #include <pthread.h> main() { pthread_t f2_thread, f1_thread; void *f2(), *f1(); int i1,i2; i1 = 1; i2 = 2; pthread_create(&f1_thread,NULL,f1,&i1); pthread_create(&f2_thread,NULL,f2,&i2); pthread_join(f1_thread,NULL); pthread_join(f2_thread,NULL); } void *f1(int *x){ int i; i = *x; sleep(1); printf("f1: %d",i); pthread_exit(0); } void *f2(int *x){ int i; i = *x; sleep(1); printf("f2: %d",i); pthread_exit(0); }
그리고 여기 컴파일 명령입니다.
gcc -lpthread pthread_simple.c
결과 :
lptang@tlp-linux:~/test/test-pthread$ gcc -lpthread pthread_simple.c /tmp/ccmV0LdM.o: In function `main": pthread_simple.c:(.text+0x2c): undefined reference to `pthread_create" pthread_simple.c:(.text+0x46): undefined reference to `pthread_create" pthread_simple.c:(.text+0x57): undefined reference to `pthread_join" pthread_simple.c:(.text+0x68): undefined reference to `pthread_join" collect2: ld returned 1 exit status
누구든지 무엇을 알고 있습니까? ” 문제의 원인입니까?
댓글
답변
위도 est 버전의 gcc
컴파일러는 라이브러리가 개체 또는 소스 파일을 따라야합니다.
따라서 컴파일하려면 다음과 같아야합니다.
gcc pthread_sample.c -lpthread
일반적으로 pthread 코드는 다음과 같이 컴파일됩니다.
gcc -pthread pthread_sample.c
댓글
- @Karlson
pthread.h
파일을 포함하는 것만으로는 gcc가 참조를 해결하는 데 충분하지 않은 이유를 설명해 주시겠습니까? - @iamcreasy 선언은 그렇지 않기 때문에 정의와 동일합니다. 프로그램은 특정 기능을 실행하는 코드가 어디에 있는지 알아야합니다.
답변
답변
다음 명령을 사용하여 코드 컴파일
gcc filename.c -lpthread -lrt
댓글
- 안녕하세요! 답변을 수정하여 작동하는 이유를 설명하고 이미 승인 된 답변이 다루지 않는 ' 무언가를 추가한다고 생각하는 이유를 강조 할 수 있다면 도움이 될 것입니다.
#include <pthread.h>
가 있어야합니다.
gcc -pthread...
를 시도 했습니까?-Wall
, ' 헤더가 없습니다. (그리고 sr_이 맞습니다.)