gcc는 ' pthread에 연결할 수 없습니까?

최근에 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 

누구든지 무엇을 알고 있습니까? ” 문제의 원인입니까?

댓글

  • 포함 내용이 비어있는 것이 stackexchange '의 잘못입니까? 처음 두 줄에 #include <pthread.h>
  • 가 있어야합니다.

  • 예, 사전 환경을 사용했습니다. 이제 올바르게 표시됩니다.
  • gcc -pthread...를 시도 했습니까?
  • BTW, -Wall, ' 헤더가 없습니다. (그리고 sr_이 맞습니다.)

답변

위도 est 버전의 gcc 컴파일러는 라이브러리가 개체 또는 소스 파일을 따라야합니다.

따라서 컴파일하려면 다음과 같아야합니다.

gcc pthread_sample.c -lpthread 

일반적으로 pthread 코드는 다음과 같이 컴파일됩니다.

gcc -pthread pthread_sample.c 

댓글

  • @Karlson pthread.h 파일을 포함하는 것만으로는 gcc가 참조를 해결하는 데 충분하지 않은 이유를 설명해 주시겠습니까?
  • @iamcreasy 선언은 그렇지 않기 때문에 정의와 동일합니다. 프로그램은 특정 기능을 실행하는 코드가 어디에 있는지 알아야합니다.

답변

gcc -o exectable_namme pthread_sample.c -lpthread 

댓글

  • 이유를 설명하려면 답변을 수정 하는 것이 좋습니다. 이미 승인 된 답변과 다릅니다.

답변

다음 명령을 사용하여 코드 컴파일

gcc filename.c -lpthread -lrt 

댓글

  • 안녕하세요! 답변을 수정하여 작동하는 이유를 설명하고 이미 승인 된 답변이 다루지 않는 ' 무언가를 추가한다고 생각하는 이유를 강조 할 수 있다면 도움이 될 것입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다