2012-03-21 61 views
7

tôi có mã này:tham khảo Không xác định để pthread_create

#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; 
} 

Và trong các tùy chọn trình biên dịch tôi chèn -lpthread
Nhưng nó nói:
"tài liệu tham khảo Không xác định để pthread_create"
tôi sử dụng ubuntu 10.10 , vì vậy tôi đã cài đặt thư viện pthread, tôi không thể tìm ra lý do của lỗi này.

+0

Cho chúng tôi biết cách bạn biên dịch chương trình của mình. – cnicutar

+0

Bạn đã thêm tùy chọn trình liên kết và ở đâu? Phiên bản nào của Code :: Blocks? –

Trả lời

28

Sử dụng lpthread làm cờ trình biên dịch cuối cùng.

dụ: gcc -o sample sample.c -lpthread

+0

Tôi đã đặt tùy chọn này. –

+1

@RamyAlZuhouri Không, bạn không biết. Bạn có thể làm hỏng các thiết lập mã hóa. 1 để chống lại downvote sai. – cnicutar

+0

Có, tôi đã đặt nó. Nó trên cài đặt-> trình biên dịch và trình gỡ lỗi -> (tab cài đặt trình biên dịch) -> các tùy chọn khác. –

13

Nếu không nhìn thấy lệnh trình biên dịch, tôi nghi ngờ -lpthread không phải là lúc kết thúc. Thư viện cần phải được đặt ở cuối của lệnh biên dịch:

gcc main.c -lpthread

Tuy nhiên, sử dụng -pthread thay vì -lpthread, như -pthread có thể thêm các thiết lập khác (như định vĩ mô _REENTRANT ví dụ).

+0

Tôi biên dịch nó bằng mã :: khối, trong C :: B tùy chọn bây giờ tôi đã thay đổi _-lpthread_ với _-pthread_, nhưng không có gì thay đổi. Đây là tùy chọn duy nhất tôi có trong cài đặt. –

+0

Tôi không quen thuộc với mã :: khối, nhưng bạn có thể thử xây dựng lại hoàn toàn nguồn không? – hmjd

4

Sử dụng lệnh này:

gcc -o -pthread main.c chính

-2

tìm thấy những kẻ giải pháp: D chỉ cần đi đến các thiết lập >> biên dịch >> tab mối liên kết >> thêm lib đi lái xe và vào thư mục lib và tìm "x86_64_linux_gnu" và tìm "pthread" tận hưởng :)

0

Trong Eclipse, bạn nên thêm chuỗi pthread.

Project -> Properties -> C/C++ Build -> Settings -> Tool Settings -> GCC Linker -> Thư viện -> Libraries (-l) -> Add -> pthread

Sau đó xây dựng dự án của bạn .

+1

Nhưng OP cho biết trong một nhận xét rằng ông đang sử dụng Code :: Blocks, chứ không phải Eclipse. –

Các vấn đề liên quan