2013-01-19 19 views
25

मैं उबंटू 12.04 चला रहा हूं और मैं वर्तमान में सी, ओपनजीएल, एक टीपोट और इनपुट विधियों से जुड़े एक परियोजना पर काम कर रहा हूं।जीसीसी/यूएसआर/बिन/एलडी: त्रुटि: नहीं मिल सका

समस्या तब शुरू हुई जब मैंने इनपुट के रूप में तीर कुंजी रखने का निर्णय लिया। मैंने तीर कुंजियों के लिए कुंजी कोड देखने के लिए जांच की लेकिन सभी तीर 0 लौट आए। मैंने देखा कि इसे कैसे काम पर लाया जाए और मुझे conio.h मिला। दुर्भाग्य से, यह एक पुराना डॉस हेडर है जो लिनक्स के लिए उपलब्ध नहीं है। तब मुझे ncurses नामक एक विकल्प मिला।

आवश्यक पुस्तकालयों को स्थापित करने के बाद, निर्माण निर्देशों का बारीकी से पालन करके, मैंने अपने मुख्य.c स्रोत में curses.h शामिल किया। जब मैं पहली बार जीसीसी का उपयोग कर संकलन करने की कोशिश की, मैं निम्न त्रुटियों मिला:

main.o:main.c:function _Key: error: undefined reference to 'stdscr' 
main.o:main.c:function _Key: error: undefined reference to 'wgetch' 
main.o:main.c:function _Key: error: undefined reference to 'stdscr' 
main.o:main.c:function _Key: error: undefined reference to 'wgetch' 

मैं बहुत तरह makefile को -lncurses जोड़कर एक समाधान मिल जाने:

SOURCES=main.c 

main: main.o 
    gcc -lm -lGL -lGLU -lglut -lncurses main.o -o main 

main.o: main.c 
    gcc -lm -lGL -lGLU -lglut -c main.c 

लेकिन मैं एक और त्रुटि द्वारा स्वागत किया :

/usr/bin/ld: error: cannot find -lncurses 

साथ ही पिछली त्रुटियां भी।

मैंने पिछले 2 दिनों में उबंटू मंच और स्टैक ओवर फ्लाउ दोनों को खोजा है। किसी भी सहायता की सराहना की जाएगी।

पीएस अगर यह महत्वपूर्ण है मैं नहीं जानता लेकिन जब मैं/usr/bin/ld चलाने का प्रयास है कि मैं इस त्रुटि मिलती है:

ld: fatal error: no input files 
+20

'apt-get libncurses5-dev' स्थापित करें? – trojanfoe

+0

इन टिप्पणियों को इतना छोटा क्यों होना चाहिए-_- मैंने आपकी टिप्पणी पहले नहीं देखी थी लेकिन यह ठीक था। डुनो क्यों, लेकिन ऐसा लगता है कि मैंने किसी प्रकार का गैर-आधिकारिक संस्करण स्थापित किया है जिसे संकलक पहचाना नहीं गया था। सबको धन्यवाद! – Yrrej10

उत्तर

2

सबसे पहले, आप पुस्तकालयों के बाद वस्तु फ़ाइल लिंक करते समय रखना चाहिए। और उन्हें स्रोत फ़ाइल के संकलन में बिल्कुल नहीं है।

उसके बाद, ncurses आप लिंकर जहां यह, इस -L कमांड लाइन विकल्प के साथ किया जाता है के लिए बाहर बात करने के लिए जरूरत है एक मानक खोज फ़ोल्डर में स्थापित नहीं है, तो:

gcc main.o -o main -L/location/of/ncurses -lm -lGL -lGLU -lglut -lncurses 
1

ncurses-static स्थापित करने का प्रयास पैकेज भी, अगर आपके पास उबंटू ओएस में केवल ncurses-devel पैकेज स्थापित है।

यदि यह आपकी समस्या हल करता है, और यदि आप @ जोआचिम के संकलन निर्देश जोड़ते हैं, तो आप एक महान शुरुआत के लिए बंद हैं।

gcc main.o -o main -L/location/of/ncurses -lm -lGL -lGLU -lglut -lncurses 

लिंकर आपके साझा लाइब्रेरी को इसके खोज पथ में नहीं ढूंढ सकता है। यदि आप निर्देशिका जोड़ते हैं जहां आपकी साझा lib LD_LIBRARY_PATH पर्यावरण चर है तो लिंकर को इसे ढूंढना चाहिए और इसके खिलाफ लिंक करने में सक्षम होना चाहिए। उस मामले में आप जीसीसी के लिए -L विकल्प छोड़ सकता है:

gcc main.o -o main -lm -lGL -lGLU -lglut -lncurses 

और यह ठीक संकलन चाहिए।

संपादित करें: यह जानना अच्छा है कि apt-get install libncurses5-dev आपकी समस्या को हल करता है।

एफवाईआई। LD_LIBRARY_PATH पर्यावरण चर में पथों की एक अलग-अलग सूची शामिल है जो लिंकर रन टाइम पर लाइब्रेरी निर्भरताओं को हल करने के लिए उपयोग करता है। इन पथों को मानक पुस्तकालय पथ /lib और /usr/lib पर प्राथमिकता दी जाएगी।मानक पथ अभी भी खोजे जाएंगे, लेकिन LD_LIBRARY_PATH में पथों की सूची समाप्त होने के बाद ही समाप्त हो गया है।

LD_LIBRARY_PATH का उपयोग करने का सबसे अच्छा तरीका प्रोग्राम को निष्पादित करने से पहले इसे कमांड लाइन या स्क्रिप्ट पर सेट करना है। इस तरह आप अपने शेष सिस्टम से स्थानीयको अलग-अलग चल रहे उदाहरण के लिए स्थानीय खोल सकते हैं।

$ export LD_LIBRARY_PATH="/path/to/libncurses/library/directory/:$LD_LIBRARY_PATH" 
$ gcc main.o -o main -lm -lGL -lGLU -lglut -lncurses 
+0

और भी समस्याएं अभी भी:/ 1. मेरे पास केवल libncurses.so.5 और libncurses.so.5.9 हैं, जिनमें से दोनों को 2. दोबारा एलडी_LIBRARY_PATH चर – Yrrej10

+0

कहां मिल रहा है आप '$ का उपयोग नहीं करना चाहते हैं LD_LIBRARY_PATH'; यदि आपको गैर-मानक लोडर पथ कॉन्फ़िगर करने की आवश्यकता है तो '/ etc/ld.so.conf.d' में एक फ़ाइल बनाएं। – trojanfoe

+0

अब मैं उलझन में हूं। मैंने /etc/ld.so.conf.d में फ़ाइलों को देखा और ncurses पुस्तकालय उन निर्देशिकाओं में हैं: lib/i386-linux-gnu और usr/lib/i386-linux-gnu – Yrrej10

39

किसी भी समस्या के साथ मेरे पास था: मुझे 32 बिट पुस्तकालयों में कमी आई थी; मैं 64 बिट सर्वर पर 32 बिट संकलित कर रहा था जिसमें lib32ncurses5-dev पैकेज अनुपलब्ध था।

उबंटू पर मैं बस भाग गया:

sudo apt-get install lib32ncurses5-dev 
+7

मैं gnureadline इंस्टॉल नहीं कर सका पाइप, पायथन 2.7 के माध्यम से और यह मेरी समस्या हल हो गई। – rioted

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