ld को कोई मौजूदा लाइब्रेरी नहीं मिल रही है


169

मैं इस डेबियन लेन सिस्टम पर g ++ के साथ एक एप्लिकेशन लिंक करने का प्रयास कर रहा हूं। ld यह शिकायत कर रहा है कि यह निर्दिष्ट पुस्तकालय नहीं पा सकता है। यहाँ विशिष्ट उदाहरण ImageMagick है, लेकिन मुझे कुछ अन्य पुस्तकालयों के साथ भी ऐसी ही समस्या है।

मैं लिंकर को बुला रहा हूं:

g++ -w (..lots of .o files/include directories/etc..) \
-L/usr/lib -lmagic

ld शिकायतें:

/usr/bin/ld: cannot find -lmagic

हालाँकि, कामवासना मौजूद है:

$ locate libmagic.so
/usr/lib/libmagic.so.1
/usr/lib/libmagic.so.1.0.0
$ ls -all /usr/lib/libmagic.so.1*
lrwxrwxrwx 1 root root    17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0
-rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0
$ ldd /usr/lib/libmagic.so.1.0.0 
    linux-gate.so.1 =>  (0xb7f85000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb7f51000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7df6000)
    /lib/ld-linux.so.2 (0xb7f86000)
$ sudo ldconfig -v | grep "libmagic"
    libmagic.so.1 -> libmagic.so.1.0.0

मैं आगे इस समस्या का निदान कैसे करूं, और क्या गलत हो सकता है? क्या मैं पूरी तरह से बेवकूफ बना रहा हूं?

जवाबों:


158

समस्या यह है कि लिंकर की तलाश है libmagic.soलेकिन आपके पास केवल हैlibmagic.so.1

एक त्वरित हैक करने के लिए सहानुभूति libmagic.so.1हैlibmagic.so


3
यह काम करता है, मैं इस तरह से हैरान हूं कि यह फ़ाइल को डिफ़ॉल्ट रूप से बेकार तरीके से नाम देगा - क्या आप कोई अंतर्दृष्टि प्रदान कर सकते हैं कि यह डिफ़ॉल्ट रूप से ऐसा क्यों करेगा?
अधिकतम पेंगुइन

5
Foo.so.1 भी foo.so.1.0.0 के लिए एक सहिष्णुता है। इस तरह, आपके सिस्टम में एक लाइब्रेरी के कई संस्करण हो सकते हैं, और यदि किसी एप्लिकेशन को किसी विशिष्ट की आवश्यकता है, तो वह इसे लिंक कर सकता है, जबकि सामान्य तौर पर, सबसे नया सिम्बलिन द्वारा चुना जाता है। मुझे नहीं पता कि यह सिमलिंक क्यों गायब था।
श्वेन्ते

46
libmagic.so.1 सोनमे है, जिसका उपयोग डायनेमिक लिंकर द्वारा किया जाता है; libmagic.so का उपयोग लिंकर द्वारा किया जाता है, और यह आमतौर पर हेडर के साथ -देव पैकेज में एक साथ होता है। -विद्या पैकेज स्थापित नहीं होने के कारण सिम्लिंक गायब हो सकता है।
सीज़रबी

13
मुझे एक ही समस्या थी ... "हैक" करने के बजाय मैंने "* -वेल" संस्करण स्थापित किया और इसने संकलन को ठीक किया।
ट्रेवर बोयड स्मिथ

4
लिंबायडिक्स के लिए कैसे करें? और उन "डेवेल" पैकेजों को कहां ढूंढना है
ब्लैक

68

जैसा कि grepsedawk द्वारा तैयार किया गया है, उत्तर कॉलिंग के -lविकल्प में निहित है । यदि आप इस कमांड के मैन पेज को देखते हैं, तो आप या तो कर सकते हैं:g++ld

  • g++ -l:libmagic.so.1 [...]
  • या: g++ -lmagic [...]अगर आपके पास lib lib.so नाम का सिम्बल है, जो आपके लिबास पथ में है

या संक्षेप में, libउपयोग करते समय इसे जोड़ने पर उपसर्ग को हटा दें -l-llibmagicहोना चाहिए -lmagic
phyatt

31

यह साझा पुस्तकालयों को उनके रनटाइम घटकों ( libmagic1: /usr/lib/libmagic.so.1 → libmagic.so.1.0.0) और उनके विकास घटकों ( libmagic-dev: /usr/lib/libmagic.so → …) में अलग करने के लिए डेबियन सम्मेलन है ।

क्योंकि लाइब्रेरी का सोनम है libmagic.so.1, वह स्ट्रिंग जो निष्पादन योग्य में एम्बेडेड हो जाता है ताकि निष्पादन योग्य चलने पर फ़ाइल लोड हो जाए।

हालाँकि, क्योंकि पुस्तकालय को -lmagicलिंकर के रूप में निर्दिष्ट किया गया है, इसलिए यह दिखता है libmagic.so, इसीलिए इसे विकास की आवश्यकता है।

डिएगो ई। पेट्टेनो देखें : लिंकर्स और विवरण के लिए नाम कि यह सब लिनक्स पर कैसे काम करता है।


संक्षेप में, आपको चाहिए apt-get install libmagic-dev। यह न केवल आपको libmagic.soबल्कि अन्य फाइलों को भी संकलित करने के लिए आवश्यक होगा /usr/include/magic.h


7

उबंटू में, आप स्थापित कर सकते हैं libtoolजो पुस्तकालयों को स्वचालित रूप से हल करता है।

$ sudo apt-get install libtool

इससे ltdlमेरे लिए एक समस्या का समाधान हो गया, जो कि स्थापित किया libltdl.so.7गया था और जैसा कि केवल -lltdlमेक में नहीं पाया गया था ।


यह त्रुटि हल नहीं किया था ठीक नहीं कर सकता -LGL । क्या आप कृपया इस बारे में अधिक जानकारी दे सकते हैं कि लिबेटूल क्या करता है और यह कैसे पुस्तकालय के मुद्दों को हल करता है?
शायरीर सलझोई

4

जब तक मैं बुरी तरह से गलत नहीं हूँ libmagicया -lmagicImageMagick जैसी लाइब्रेरी नहीं है। आप कहते हैं कि आप ImageMagick चाहते हैं।

ImageMagick संकलक के लिए सभी उपयुक्त विकल्पों की आपूर्ति करने के लिए एक उपयोगिता के साथ आता है।

उदाहरण के लिए:

g++ program.cpp `Magick++-config --cppflags --cxxflags --ldflags --libs` -o "prog"

4

जैसा कि ऊपर बताया गया है कि लिंकर की तलाश है libmagic.so, लेकिन आपके पास केवल है libmagic.so.1

इस समस्या को हल करने के लिए बस एक अपडेट कैश करें।

ldconfig -v 

सत्यापित करने के लिए आप चला सकते हैं:

$ ldconfig -p | grep libmagic

1

Ubuntu repo से libgl1-mesa-dev स्थापित करने से मेरे लिए यह समस्या हल हो गई।


5
निश्चित रूप से आप 2008 में मैक्सपेंग्जिन के समान स्क्रिप्ट बग से पीड़ित नहीं हैं।
सोफिट

इसने मेरी समस्या हल कर दी। क्या आप कृपया इस बारे में अधिक जानकारी दे सकते हैं। और यह इस मुद्दे को कैसे हल करता है? (मेरा मतलब है: libgl1-mesa-dev)। धन्यवाद
शहरयार Saljoughi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.