लिंकर (ln) त्रुटि: कुछ फ़ाइलें नहीं मिल सकती हैं


1

मैं स्रोत से कुछ का निर्माण कर रहा हूं और मुझे निम्नलिखित उत्पादन प्राप्त होते हैं:

  ...
  CC     libpromises_la-mod_outputs.lo
  CC     libpromises_la-unix.lo
  CCLD   libpromises.la
  CC     cfknow.o
  CC     manual.o
  CCLD   cf-know
./.libs/libpromises.so: undefined reference to `dlerror'
./.libs/libpromises.so: undefined reference to `dladdr'
./.libs/libpromises.so: undefined reference to `dlclose'
./.libs/libpromises.so: undefined reference to `dlopen'
./.libs/libpromises.so: undefined reference to `dlsym'
collect2: ld returned 1 exit status
gmake[2]: *** [cf-know] Error 1
gmake[2]: Leaving directory `/tmp/cfengine/cfengine-3.1.5/src'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory `/tmp/cfengine/cfengine-3.1.5/src'
gmake: *** [all-recursive] Error 1

मैंने थोड़ा गुगली की है और ऐसा लगता है कि लिंकर को कुछ फाइलें नहीं मिल रही हैं। मुझे कभी भी इस तरह की किसी चीज़ से निपटने की ज़रूरत नहीं है, इसलिए मैं सोच रहा हूं कि क्या कोई मुझे इस संदेश को डिकोड करने में मदद कर सकता है और WHICH फ़ाइल पर इनसाइट को नहीं ढूंढा जा सकता है और मैं लिंकर को बता सकता हूं कि यह कहां है।

मुझे पता है कि संदर्भ से आता है libpromises.so, जो एक बाइनरी फ़ाइल है। इसलिए, इसे vi में खोलने से मुझे गार्बल मिलता है। क्या मैं तलाश करने वाला हूं libpromises.h? libpromises.c?


1
क्या आप सुनिश्चित हैं कि आपके पास आवश्यक पुस्तकालय स्थापित हैं? यह अधूरी आवश्यकताओं की त्रुटि हो सकती है।
new123456

मैं सी प्रोग्रामिंग में पारंगत नहीं हूं, इसलिए मुझे यकीन नहीं है कि वे पुस्तकालय क्या हैं और उन्हें कैसे खोजना है। मेरे पास यह मानते हुए कि मैं लिंकर को कैसे बता सकता हूं कि कहां देखना है?
n0pe

जवाबों:


2

आपको मेकफाइल को संपादित करने और इसे जल्दी से पूरा करने में सक्षम होना चाहिए।

नोट - यह मानता है कि Makefile GNU ऑटोटूलस द्वारा बनाया गया था। Cfengine टारबॉल के अनुसार, वे करते हैं।

सबसे पहले मेकफाइल को खोलें और झंडे को देखें LDFLAGS। यह कुछ इस तरह दिखना चाहिए:

LDFLAGS = -lfoo -lbar

उस सूची में शामिल हों -ldl। यह डायनेमिक लोड लाइब्रेरी के लिए एक संदर्भ जोड़ता है।

Recompile, और linker को यह काम करने में सक्षम होना चाहिए।


LIBS पर्यावरण चर एक पर्यावरण चर है जो बताता है ./configureकि अतिरिक्त पुस्तकालयों की क्या आवश्यकता है, जो तब मेकफाइल में चिपक जाता है (इसलिए, आपके प्रश्न का उत्तर देने के लिए, ./configureवास्तव में लिंकर को नहीं चलाता है - यह मेकफाइल बनाता है, जो gccमापदंडों के साथ चलता है से मिला ./configure)।

तो, उपयोग करें LIBS=-ldl && ./configure


यह एक मजेदार जवाब की तरह लग रहा है, मुझे एक मेकफाइल संपादित करना है :) हालांकि, मुझे काम पर वापस जाने के लिए सोमवार तक इंतजार करना होगा। जब मैं काम पर वापस जाऊंगा और यह कोशिश करूँगा।
n0pe

मैं सिर्फ यह कोशिश की और यह काम नहीं किया।
npe

1
@MaxMackie यह कोशिश करो export LIBS=-ldl && ./configure:। यहां से रवाना हुए ।
new123456

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