/Lib/libc.so.6 অনুপস্থিত কেন?


20
find | grep libc.so.6

এটি প্রকাশিত হয়েছে যে প্রকাশ করে /lib/i386-linux-gnu/libc.so.6, তবে আমি যে স্ক্রিপ্টটি চালাচ্ছিলাম এটি সরাসরি এটির অধীনে থাকবে বলে আশা করা হচ্ছে /lib, তবে কেন সেখানে কমপক্ষে একটি সিমলিংক নেই?

আমি যদি সেখানে একটি সিমিলিংক রাখি তবে কি আমি কোনও কিছু ভাঙার ঝুঁকি নেব?

উত্তর:


22

libc.soউবুন্টু ১১.০৪- এ মাল্টিার্চ কাজের অংশ হিসাবে সরানো হয়েছিল । সেখানে একটি সিমলিংক না থাকার কারণটি হ'ল মাল্টার্কের উদ্দেশ্য হ'ল একই সাথে সংস্করণ i386এবং amd64সংস্করণ উভয়ই ইনস্টল করা সম্ভব করা libcযায় যাতে আপনি easily৪-বিট সিস্টেমে আরও সহজেই 32-বিট বাইনারি চালাতে পারেন এবং তদ্বিপরীত (এবং অন্যান্য অনুরূপ পরিস্থিতি)। যদি libc6প্যাকেজটিতে নতুন অবস্থানে একটি সিমিলিংক থাকে, তবে dpkgঅনুশীলনের পুরো পয়েন্টটি পরাভূত করে বিভিন্ন আর্কিটেকচারের জন্য সেই প্যাকেজের সংস্করণগুলি একই সাথে ইনস্টলযোগ্য হবে না (সিমলিংকের কোন সংস্করণটি চয়ন করবে?)।

libc.soউবুন্টু ১১.০৪ থেকে সঠিকভাবে কাজ করার জন্য যে পথটিকে হার্ডকোডগুলি দেওয়া হয়েছে সেটিকে অবশ্যই আপডেট করতে হবে। আপনি যে স্ক্রিপ্টটির কথা বলছেন তা যদি উবুন্টুর অংশ হয় তবে দয়া করে এটিতে একটি বাগ রিপোর্ট করুন এবং multiarchট্যাগটি যুক্ত করুন।


1
সুন্দর উত্তর, আজ নতুন কিছু শিখেছে (আবার) :)
লেকেনস্টেইন

1
আমি যে প্রসেসরটি ব্যবহার করছি তা 64৪ বিটের নির্দেশাবলীও সমর্থন করে না। আপনি কি বলতে পারবেন ম্যানুয়ালি একটি সিমলিংক যুক্ত করার সাথে কোনও ঝুঁকি আছে? নিশ্চিত যে আমার এটি করা দরকার, তবে যদি না। যাইহোক, এটি সঠিক উত্তর বলে মনে হচ্ছে। ধন্যবাদ।
এরিক বি

@ এরিক বি: কি? আপনি কি আমাকে বলছেন আপনি 32 বিট প্রসেসরের একটি 64 অ্যাপ্লিকেশন ব্যবহার করার চেষ্টা করছেন? যে স্পষ্টভাবে এর না কাজ করে যাচ্ছে। 32 বিট অ্যাপস 64 বিট প্রসেসরটিতে দুর্দান্ত কাজ করে তবে বিপরীতে নয়।
লেকেনস্টেইন

@ লিকেনস্টেইন আমি নিশ্চিতভাবে যা বলছি তা হ'ল না। আমি যা বলছি তা হ'ল 64 বিট লাইব্রেরির জন্য আমার কোনও ব্যবহার নেই। সুতরাং আমার বিশেষ সিস্টেমে /lib/libc.so.632 বা 64 বিট গ্রন্থাগার কিনা তা নিয়ে কোনও বিভ্রান্তি ঘটবে না ।
এরিক বি

3
আপনি যদি কখনও 64৪-বিট প্যাকেজ ব্যবহার না করেন তবে আমার সন্দেহ হয় যে একটি সিমিলিংক যুক্ত করার ক্ষেত্রে কোনও উল্লেখযোগ্য ঝুঁকি রয়েছে, না।
কলিন ওয়াটসন

10

ডায়নামিক লাইব্রেরিগুলি কার্নেল দ্বারা লোড করা হয়, কোনও প্রোগ্রামে পাথগুলি হার্ডকোড করা হয় না। একটি প্রোগ্রাম ঠিক বলেছে "আমার libc.so.6 দরকার"। তারপর সিস্টেম হিসাবে সংজ্ঞায়িত অনুসন্ধানসমূহ গ্রন্থাগার মার্গে /etc/ld.so.confসহ, /usr/libএবং /libডিফল্ট ভাবে। এই ফাইলটিতে অতিরিক্ত কনফিগারেশন ফাইল অন্তর্ভুক্ত রয়েছে /etc/ld.so.conf.d

আমার 64 বিট সিস্টেমে, সংজ্ঞায়িত পাথের কারণেই libc.so.6এটি পাওয়া যাবে :/lib/x86_64-linux-gnu/libc.so.6/etc/ld.so.conf.d/x86_64-linux-gnu.conf

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

কোন প্রোগ্রাম দ্বারা কোন লাইব্রেরি লোড করা হয়েছে তা খুঁজে পেতে, এই lddহিসাবে ব্যবহার করুন ldd /bin/bash:

    linux-vdso.so.1 =>  (0x00007ffff1dff000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)

সিমলিংক লাগানো কিছুতেই ভাঙবে না।

অনুসন্ধান করা ডিরেক্টরিগুলির একটি তালিকা পেতে, চালনা করুন:

ldconfig -v -N | grep '^/'

-vফাইল + ডিরেক্টরিগুলির একটি তালিকা দেখানোর কারণ হয়, -Nক্যাশে ( /etc/ld.so.cache)টিকে পুনরায় তৈরি হতে বাধা দেয় ।


সিমলিংক লাগানো কিছুতেই ভাঙ্গবে না, তবে এটি সত্যিই ভাল কিছু করবে না, তাই না?
এরিক বি

@ এরিক বি: আপনি কোন প্রোগ্রাম / স্ক্রিপ্টের উল্লেখ করছেন? আমি বুঝতে পারি যে কোনও স্ক্রিপ্ট বিভ্রান্ত হয়ে পড়ে কারণ পথটি হার্ডকোডযুক্ত। তবে কোনও প্রোগ্রামের পথটি জানতে হবে না।
লেকেনস্টেইন

এটি কি এইভাবে কাজ করে? আমার মনে হয় সমস্যাগুলি মাঝে মাঝে রয়েছে যেখানে প্রোগ্রামগুলি ইনস্টল করা লাইব্রেরিগুলি ইনস্টল করতে পারে না /usr/local/lib, তবে আমি যদি একটি সিএমলিঙ্ক তৈরি করি তবে সেগুলি ঠিকঠাক কাজ করে /usr/lib। এই আচরণের কারণ কী?
পাগল

@ পাগল 2be: আপনি কি আউটপুট পোস্ট করতে পারবেন ldconfig -v -N | grep '^/'?
লেকেনস্টেইন

@ লেকেনস্টেইন: অবশ্যই: পেস্টবিন . com/dtfnw2Tv । এটি আমি প্রায় যে কোনও সিস্টেমে ব্যবহার করেছি তার কিছু প্রোগ্রামের সাথে ঘটেছিল, তবে আমি ধরে নিয়েছি এটি সিস্টেম কনফিগারেশনের সাথে সম্পর্কিত নয়।
পাগল 2

5

কেবলমাত্র libc.so.6 ফাইলে syMLink যুক্ত করুন:

sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6

সিস্টেমে থাকা অন্যান্য অনুপস্থিত ফাইলগুলির ক্ষেত্রেও একই ঘটনা ঘটে, আমার ক্ষেত্রে মতলব ফাইলটি অনুপস্থিত ছিল, সমস্যাটি এখন চলে গেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.