2012-03-21 20 views
7

मैं इस कोड है:अपरिभाषित संदर्भ 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; 
} 

और संकलक विकल्पों में मैं -lpthread
डालने लेकिन यह कहते हैं: "pthread_create को अपरिभाषित संदर्भ"

मैं ubuntu 10.10 का उपयोग , इसलिए मेरे पास पहले से ही pthread लाइब्रेरी स्थापित है, मैं इस त्रुटि का कारण नहीं समझ सकता।

+0

हमें दिखाएं कि आप अपने प्रोग्राम को कैसे संकलित करते हैं। – cnicutar

+0

आपने लिंकर विकल्प और कहां जोड़ा? कोड :: ब्लॉक का कौन सा संस्करण? –

उत्तर

28

अंतिम कंपाइलर ध्वज के रूप में -lpthread का उपयोग करें।

उदाहरण: gcc -o sample sample.c -lpthread

+0

मैंने पहले से ही यह विकल्प रखा है। –

+1

@RamyAlZuhouri नहीं आप नहीं करते हैं। आप शायद codeblocks सेटिंग्स को बॉट किया। गलत डाउनवोट का सामना करने के लिए +1। – cnicutar

+0

हां, मैंने इसे रखा है। यह सेटिंग्स-> कंपाइलर और डीबगर -> (कंपाइलर सेटिंग्स टैब) -> अन्य विकल्प पर है। –

13

संकलक आदेश देखकर बिना, मुझे लगता है -lpthread अंत में नहीं है। ,

जीसीसी main.c -lpthread

हालांकि

-lpthread के बजाय -pthread उपयोग करते हैं, के रूप में -pthread अन्य सेटिंग्स (मैक्रो _REENTRANT को परिभाषित करने की तरह जोड़ सकते हैं: पुस्तकालय संकलक आदेश के अंत में रखा करने की आवश्यकता है उदाहरण के लिए)। इस आदेश

+0

मैं इसे कोड :: ब्लॉक के साथ संकलित करता हूं, सी :: बी विकल्पों में अब मैंने _-ppreadread_ _-pthread_ के साथ बदल दिया है, लेकिन कुछ भी नहीं बदला है। यह सेटिंग्स में मेरे पास एकमात्र विकल्प है। –

+0

मैं कोड :: ब्लॉक से अपरिचित हूं, लेकिन क्या आप स्रोत के पूर्ण पुनर्निर्माण का प्रयास कर सकते हैं? – hmjd

4

उपयोग:

जीसीसी -pthread -ओ मुख्य main.c

-2

पाया समाधान लोग: डी सिर्फ सेटिंग में जाना >> संकलक >> लिंकर टैब >> lib करने के लिए जाने जोड़ने ड्राइव करें और lib फ़ोल्डर पर जाएं और "x86_64_linux_gnu" ढूंढें और "pthread" ढूंढें आनंद लें :)

0

ग्रहण में, आपको स्ट्रिंग पाथ्रेड जोड़ना चाहिए।

परियोजना -> गुण -> C/C++ बिल्ड -> सेटिंग्स -> उपकरण सेटिंग्स -> जीसीसी लिंकर -> पुस्तकालय -> पुस्तकालय (एल) -> जोड़ें -> pthread

इस अपनी परियोजना का निर्माण करने के बाद ।

+1

लेकिन ओपी ने एक टिप्पणी में कहा कि वह कोड :: ब्लॉक का उपयोग कर रहा है, ग्रहण नहीं। –

संबंधित मुद्दे