पीसीसीपीटी से लिंक नहीं कर सकते?


17

मैंने हाल ही में XUbuntu 11.10 64bit स्थापित किया है, लेकिन मुझे सबसे सरल preadread उदाहरण संकलन में समस्या हो रही है।

यहाँ कोड है pthread_simple.c:

#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 -lpreadread pthread_simple.c

परिणाम:

lptang @ tlp-linux: ~ / test / test-pthread $ gcc -lpthread pthread_simple.c 
/tmp/ccmV0LdM.o: फ़ंक्शन में 'मुख्य':
pthread_simple.c :(। टेक्स्ट + 0x2c): 'pthread_create' का अपरिभाषित संदर्भ
pthread_simple.c :(। पाठ + 0x46): 'pthread_sreate' का अपरिभाषित संदर्भ
pthread_simple.c :(। पाठ + 0x57): `pthread_join 'के लिए अपरिभाषित संदर्भ
pthread_simple.c :(। टेक्स्ट + 0x68): `pthread_join 'के लिए अपरिभाषित संदर्भ
collect2: ld ने 1 निकास स्थिति लौटा दी

क्या किसी को पता है कि समस्या क्या है?


क्या यह स्टैकएक्सचेंज की गलती है जो आपके पास खाली है पहले दो लाइनों में शामिल हैं? #include <pthread.h>
Frg

हां, मैंने पूर्व परिवेश का उपयोग किया है। इसे अब सही ढंग से प्रदर्शित किया जाना चाहिए।
chtlp


BTW, के साथ संकलित करें -Wall, आप हेडर याद कर रहे हैं। (और sr_ सही है।)
Mat

जवाबों:


26

gccसंकलक के नवीनतम संस्करणों में पुस्तकालयों को ऑब्जेक्ट या स्रोत फ़ाइलों का पालन करने की आवश्यकता होती है।

तो यह संकलन करने के लिए यह होना चाहिए:

gcc pthread_sample.c -lpthread

आम तौर पर हालांकि pthread कोड इस तरह संकलित किया जाता है:

gcc -pthread pthread_sample.c

1
@ कार्लसन क्या आप यह बता सकते हैं pthread.hकि संदर्भों को हल करने के लिए सिर्फ gcc के लिए फ़ाइल को शामिल करना पर्याप्त क्यों नहीं है?
क़ाज़ी इरफ़ान

2
@iamcreasy क्योंकि घोषणा परिभाषा के समान नहीं है। कार्यक्रम को यह जानना होगा कि किसी विशेष फ़ंक्शन को निष्पादित करने वाला कोड कहां है।
कार्लसन


0

निम्नलिखित आदेश का उपयोग कर संकलन कोड

gcc filename.c -lpthread -lrt

1
नमस्ते! यह उपयोगी होगा यदि आप अपने उत्तर को यह समझाने के लिए संपादित कर सकते हैं कि यह क्यों काम करता है, और यह उजागर करने के लिए कि आपको क्यों लगता है कि यह पहले से स्वीकृत उत्तर को कवर नहीं करता है।
धग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.