2012-03-21 2 views
7

를 앞서 pthread_create : 나는 -lpthread
를 삽입 정의되지 않은 참조는이 코드가

#include <stdio.h> 
#include <pthread.h> 

void* cuoco(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cuoco\n"); 
    fprintf(stderr,"Fine codice cuoco\n"); 
    return NULL; 
} 

void* cameriere(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cameriere\n"); 
    fprintf(stderr,"Fine codice cameriere\n"); 
    return NULL; 
} 

void* cliente(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cliente\n"); 
    fprintf(stderr,"Fine codice cliente\n"); 
    return NULL; 
} 

int main(int argc, char* argv[]) 
{ 
    void* (*routine)(void*); 
    routine=cuoco; 
    pthread_t thread_cuoco,thread_cameriere,thread_cliente; 
    pthread_create(&thread_cuoco,NULL,routine,NULL); 
    return 0; 
} 

그리고 컴파일러 옵션에

을하지만 말한다 :

내가 우분투를 10.10를 사용하는 "정의되지 않은 참조는 앞서 pthread_create" , 그래서 이미 pthread 라이브러리가 설치되어 있으므로이 오류의 원인을 알 수 없습니다.

+0

프로그램을 어떻게 컴파일하는지 보여주십시오. – cnicutar

+0

링커 옵션을 어떻게 추가 했습니까? 어떤 버전의 Code :: Blocks입니까? –

답변

28

마지막 컴파일러 플래그로 -lpthread를 사용하십시오.

예 : gcc -o sample sample.c -lpthread

+0

이미이 옵션을 넣었습니다. –

+1

@RamyAlZuhouri 아니야. 코드 블록 설정에 문제가있는 것 같습니다. +1 downvote 잘못된 counter. – cnicutar

+0

네, 설정했습니다. 설정 -> 컴파일러 및 디버거 -> (컴파일러 설정 탭) -> 다른 옵션입니다. –

13

컴파일러 명령을 보지 않고, 내가 -lpthread는 말에 있지 생각한다. -pthread 매크로 _REENTRANT를 정의처럼 (다른 설정을 추가 할 수 있기 때문에, 대신 -lpthread-pthread를 사용

GCC의 main.c를 그러나

을 -lpthread : 도서관은 컴파일러 명령의 끝에 배치해야 예를 들어).

+0

C :: B 옵션에서 code :: blocks로 컴파일합니다. 이제 _-pthread_로 _-lpthread_를 변경했지만 아무 것도 변경되지 않았습니다. 설정에서 유일한 옵션입니다. –

+0

code :: blocks에 익숙하지 않지만 소스를 완전히 다시 빌드 할 수 있습니까? – hmjd

4

이 명령을 사용하십시오 :

-2

이 솔루션 녀석을 발견 GCC -pthread -o 주요 main.c를 : D 단지 설정으로 이동 >> 컴파일러 >> 링커 탭 >>으로 이동 lib에 추가 lib 폴더로 이동하여 "x86_64_linux_gnu"를 찾고 "pthread"를 찾으십시오.

0

Eclipse에서는 pthread 문자열을 추가해야합니다.

프로젝트 -> 속성 -> C/C++ 빌드 -> 설정 -> 도구 설정 -> GCC 링커 -> 도서관 -> 도서관 (-l) -> 추가 -> pthread에

을이 프로젝트를 빌드 한 후 .

+1

하지만 OP는 Eclipse에서 Code :: Blocks를 사용하고 있다는 의견에서 말했다. –

관련 문제