ld একটি বিদ্যমান গ্রন্থাগার খুঁজে পাবে না


169

আমি এই ডেবিয়ান ল্যানি সিস্টেমে g ++ এর সাথে একটি অ্যাপ্লিকেশন লিঙ্ক করার চেষ্টা করছি। ld অভিযোগ করছে এটি নির্দিষ্ট গ্রন্থাগার খুঁজে পাচ্ছে না। এখানে সুনির্দিষ্ট উদাহরণটি ইমেজম্যাগিক, তবে কয়েকটি অন্যান্য লাইব্রেরিতে আমারও একই সমস্যা রয়েছে।

আমি লিঙ্কারটির সাথে কল করছি:

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

এলডি অভিযোগ করেছেন:

/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
কিভাবে libmagic.so থেকে libmagic.so তে sylink করবেন? এবং এই "ডেভেল" প্যাকেজগুলি কোথায় পাবেন
কালো

68

ঠিক যেমন গ্রেপসেডক দ্বারা সূচিত, উত্তরটি কল করার -lবিকল্পের মধ্যে রয়েছে । আপনি যদি এই কমান্ডের ম্যান পৃষ্ঠাটি দেখে থাকেন তবে আপনি এটি করতে পারেন:g++ld

  • g++ -l:libmagic.so.1 [...]
  • বা g++ -lmagic [...]:, যদি আপনার লাইবস পাথে libmagic.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এজন্য এটি বিকাশের জন্য প্রয়োজন।

দেখুন Linkers নাম: দিয়েগো ই Pettenò লিনাক্স কিভাবে এই সব কাজেই বিস্তারিত।


সংক্ষেপে, আপনার উচিত apt-get install libmagic-dev। এটি কেবল libmagic.soআপনাকেই দেয় না তবে লাইক সংকলনের জন্য প্রয়োজনীয় অন্যান্য ফাইলও দেয় /usr/include/magic.h


7

উবুন্টুতে, আপনি ইনস্টল করতে পারেন libtoolযা স্বয়ংক্রিয়ভাবে গ্রন্থাগারগুলির সমাধান করে।

$ sudo apt-get install libtool

এটি ltdlআমার জন্য একটি সমস্যার সমাধান করেছে, যা ইনস্টল করা libltdl.so.7হয়েছিল এবং কেবল মেকের মতো পাওয়া যায় নি -lltdl


এটি ত্রুটির সমাধান করেনি - এলজিএল জরিমানা করতে পারে না । আপনি দয়া করে লাইবটোল কী করে এবং এটি কীভাবে গ্রন্থাগারের সমস্যাগুলি সমাধান করে সে সম্পর্কে আরও তথ্য দিতে পারেন?
শাহরিয়ার সালজুফি

4

আমি খারাপভাবে ভুল না হয়ে থাকলে libmagicবা -lmagicচিত্রম্যাগিকের মতো একই লাইব্রেরি না হলে। আপনি ইঙ্গিত দিয়েছেন যে আপনি চিত্রম্যাগিক চান।

সংকলকটিতে সমস্ত উপযুক্ত বিকল্প সরবরাহ করার জন্য ইমেজম্যাগিক একটি ইউটিলিটি নিয়ে আসে।

উদা:

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

4

উপরে উল্লিখিত হিসাবে লিঙ্কার খুঁজছেন libmagic.so, তবে আপনার কেবল আছে libmagic.so.1

এই সমস্যাটি সমাধান করতে কেবল একটি আপডেট ক্যাশে করুন।

ldconfig -v 

যাচাই করতে আপনি চালাতে পারেন:

$ ldconfig -p | grep libmagic

1

উবুন্টু রেপো থেকে libgl1-mesa-dev ইনস্টল করা আমার জন্য এই সমস্যার সমাধান করেছে।


5
অবশ্যই আপনি 2008 সালে ম্যাকপেনগুইন হিসাবে একই স্ক্রিপ্ট বাগে ভুগছেন না
সোফিত

এটি আমার সমস্যার সমাধান করেছে। আপনি কি দয়া করে এটি আরও তথ্য দিতে পারেন এবং কীভাবে এটি এই সমস্যার সমাধান করে? (মানে: libgl1-mesa-dev)। ধন্যবাদ
শাহরিয়ার সালজুফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.