ইউনিক্স / লিনাক্স সিস্টেমগুলি কোনও লিঙ্কযুক্ত লাইব্রেরির প্রয়োজনীয় সংস্করণ না পাওয়া পর্যন্ত ডিরেক্টরিগুলি কেন অতিক্রম করে না?


17

আমার কাছে "আলফা" নামে একটি বাইনারি এক্সিকিউটেবল রয়েছে যার জন্য একটি লিঙ্কযুক্ত লাইব্রেরি প্রয়োজন (libz.so.1.2.7) যা এখানে স্থাপন করা হয়েছে /home/username/myproduct/lib/libz.so.1.2.7

নিম্নলিখিত কমান্ডটি প্রয়োগ করে আমার বাইনারি এক্সিকিউটেবলের তৈরি করার আগে আমি আমার টার্মিনাল উদাহরণে এটি রফতানি করি।

export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH

এখন, যখন আমি অন্য অ্যাপ্লিকেশন "ব্র্যাভো" স্প্যান করি যার জন্য একই লাইব্রেরি প্রয়োজন হয় তবে বিভিন্ন সংস্করণ, যেমন (libz.so.1.2.8) পাওয়া যায় /lib/x86_64-linux-gnu/libz.so.1.2.8, সিস্টেমটি নিম্নলিখিত ত্রুটিটি ছুঁড়ে দেয়।

version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)

আমি যদি আনসেট না করি তবে LD_LIBRARY_PATH"ব্র্যাভো" ঠিক আছে। আমি বুঝতে পারি যে উপরের আচরণটি LD_LIBRARY_PATHলিঙ্কিত /etc/ld.so.confগ্রন্থাগারগুলির সন্ধান করার সময় সংজ্ঞায়িত ডিরেক্টরি পাথগুলির চেয়ে বেশি অগ্রাধিকার নেয় এবং ফলস্বরূপ উপরের ত্রুটি ঘটেছিল। আমি কেবল কৌতূহল বোধ করি কেন ইউনিক্স / লিনাক্সের বিকাশকারীরা হায়ারার্কি অনুযায়ী অন্যান্য ডিরেক্টরিতে লিঙ্কিত লাইব্রেরিগুলি অনুসন্ধানের জন্য ওএস ডিজাইন করেননি যদি গ্রন্থাগারের প্রথম উদাহরণটি ভিন্ন সংস্করণে থাকে।

সহজ কথায় বলতে গেলে, ইউনিক্স / লিনাক্স সিস্টেম প্রয়োজনীয় পাঠাগারটি না পাওয়া পর্যন্ত ডিরেক্টরিগুলির একটি সেট দিয়ে অতিক্রম করে। তবে গ্রন্থাগারের সংস্করণ নির্বিশেষে গ্রন্থাগারের প্রথম উদাহরণটি গ্রহণ না করে প্রত্যাশিত সংস্করণ না পাওয়া পর্যন্ত এটি কেন একই কাজ করে না?


আমি বেশ নিশ্চিত নই, তবে আমি সুরক্ষার জন্য অনুমান করব। আমি ব্যক্তিগতভাবে আমার মেশিনে কোথাও একটি সিম-লিঙ্ক সম্পর্কে চিন্তা করার দরকার নেই
জো

@ জো অনেকগুলি লাইব্রেরিতে তাদের কাছে ইশারা করে সিমলিংক রয়েছে। libz.so.1এটির একটি সিমিলিংকlibz.so.1.2.8
নাসির রিলে

উত্তর:


28

তবে গ্রন্থাগারের সংস্করণ নির্বিশেষে গ্রন্থাগারের প্রথম উদাহরণটি গ্রহণ না করে প্রত্যাশিত সংস্করণ না পাওয়া পর্যন্ত এটি কেন একই কাজ করে না?

এটি যতটা অবগত তা করে। zlib.so.1.2.7এবং zlib.so.1.2.8উভয়েরই একটি সোনাম রয়েছে zlib.so.1, সুতরাং আপনার alphaএবং bravoবাইনারিগুলি তাদের প্রয়োজন বলে zlib.so.1। গতিশীল লোডার এটি খুঁজে পাওয়া প্রথম মিলিত লাইব্রেরি লোড করে; এটি জানে না যে সংস্করণ 1.2.8 অতিরিক্ত প্রতীক সরবরাহ করে যা bravoপ্রয়োজন। (এই জন্যই ডিস্ট্রিবিউশন যেমন অতিরিক্ত নির্ভরতা তথ্য, নির্দিষ্ট করার যন্ত্রনা নেওয়া zlib1g (>= 1.2.8)জন্য bravo।)

আপনি সম্ভবত এটি নির্ধারণ করা সহজ হওয়া উচিত বলে মনে করেন, তবে এটি অন্তত নয় কারণ বাইনারি এবং লাইব্রেরিগুলি তাদের প্রয়োজনীয় লাইব্রেরিগুলি থেকে পৃথকভাবে যে চিহ্নগুলি প্রয়োজন সেগুলি তালিকাভুক্ত করে, সুতরাং লোডার এটি পরীক্ষা করতে পারে না যে প্রদত্ত লাইব্রেরি সমস্ত চিহ্ন সরবরাহ করে যা এটি থেকে প্রয়োজন। প্রতীকগুলি বিভিন্ন উপায়ে সরবরাহ করা যেতে পারে এবং প্রতীক এবং তাদের সরবরাহকারী লাইব্রেরিগুলির মধ্যে একটি লিঙ্ক প্রবর্তন করা বিদ্যমান বাইনারিগুলিকে ভেঙে দিতে পারে। জিনিসগুলিকে জটিল করতে (এবং সুরক্ষা-সংবেদনশীল বিকাশকারীদের চুল ছিঁড়ে ফেলার জন্য) প্রতীক ইন্টারপজিশনের অতিরিক্ত মজাদার বিষয়টিও রয়েছে।

কিছু লাইব্রেরি সংস্করণ তথ্য সরবরাহ করে যা .gnu.version_rসরবরাহকারী লাইব্রেরির লিঙ্ক সহ সঞ্চিত হয়ে শেষ হয় যা এখানে সহায়তা করবে তবে সেগুলির মধ্যে libzএকটি নয়।

(সোনাম দেওয়া হয়েছে, আমি আপনার alphaবাইনারি ভাল কাজ করবে আশা করি zlib.so.1.2.8।)


এবং একটিও লক্ষ্য করা উচিত যে জিএনইউ-স্টাইলের লাইব্রেরির সংস্করণটি সার্থক (-ish) সংস্করণ থেকে আলাদা যা আমরা সবচেয়ে অভ্যস্ত acc যেহেতু তাদের একই "বর্তমান" সংখ্যা রয়েছে, 1, zlib.so.1.2.8 তে এমন কোনও বৈশিষ্ট্য সরবরাহ করা উচিত নয় যা zlib.so.1.2.7 না করে, সুতরাং এটি কোন (এবিআই দৃষ্টিকোণ থেকে) কোনটি গুরুত্বপূর্ণ নয় পাওয়া যায় নি। এটি গুরুত্বপূর্ণ যে ত্রুটি হিসাবে বিবেচনা করা উচিত।
জন বলিঞ্জার

4
@ জন না, একমাত্র গ্যারান্টি হ'ল একই সোনাম সহ গ্রন্থাগারগুলি পিছনের দিকে সামঞ্জস্যপূর্ণ; নতুন লাইব্রেরিগুলি বৈশিষ্ট্যগুলি যুক্ত করতে পারে, তারা কোনও পিছনে-অসম্পূর্ণ ফ্যাশনে কোনও অপসারণ বা পরিবর্তন করতে পারে না। এর অর্থ হল, zlib 1.2.7 এর বিপরীতে নির্মিত একটি বাইনারি সেই বা যে কোনও নতুন zlib 1 এর সাথে কাজ করবে; তবে zlib 1.2.8 এর বিপরীতে নির্মিত একটি বাইনারি প্রয়োজনীয় বয়স্ক জিলিব 1 এর সাথে কাজ করবে না (এবং শব্দার্থিক সংস্করণ এটি অনুমোদন করে; তবে সোনাম হ্যান্ডলিং শব্দার্থক সংস্করণ নয়))
স্টিফেন কিট

1
আমি জিএনইউ কনভেনশন সম্পর্কে বিশেষভাবে কথা বলছি, যেমনটি আমি বলেছিলাম, এবং আমি বিশেষত লিবটোল সম্পর্কে অনুমান করি । প্রতিটি প্রকল্পই এই সম্মেলন অনুসরণ করে না, তাই সম্ভবত জিলিবকে ত্রুটিযুক্ত বলা খুব শক্ত, তবে অন্যদিকে, এমনকি জড়িত লাইব্রেরির সংস্করণ সংখ্যার একটি শব্দার্থ-সংস্করণীয় ব্যাখ্যা একই সিদ্ধান্তে পৌঁছে যাবে। এই জাতীয় ক্ষেত্রে ফরওয়ার্ডস (বাইনারি) সামঞ্জস্যতা কোনও সোনামের অন্তর্নিহিত প্রতিশ্রুতি নয়, তবে এই ক্ষেত্রে এটি একটি যুক্তিসঙ্গত প্রত্যাশা।
জন বলিঞ্জার

1
হ্যাঁ, আমি সিআরএ সংখ্যা এবং সরকারগুলির মধ্যে সম্পর্কটি ভালভাবে বুঝতে পেরেছি, যা আমার মূল বক্তব্যটির সাথে ফিরে আসে: ওপি দ্বারা বর্ণিত পরিস্থিতিটি সিআরএ স্কিমটির সঠিক ব্যবহারের সাথে অসামঞ্জস্যপূর্ণ বলে মনে হচ্ছে । ওপি'র মতো সমস্যা এড়ানো সেই প্রকল্পের অন্যতম মূল লক্ষ্য। Zlib যদি একটি নতুন (ক এর সংস্করণ) বাইনারি ইন্টারফেস যুক্ত করে তবে তার সি সংখ্যাটি বাড়ানো উচিত। এই ধরনের একটি গোঁফ একটি sversion বাম্প হতে পারে এছাড়াও গৌণ।
জন বলিঞ্জার

2
@ জন ঠিক বলেছেন, আমি সন্দেহ করি যে আমরা সহিংস চুক্তিতে রয়েছি এবং আপনি যে বক্তব্যটি দেখছিলেন তা আমি ভুল বুঝেছি। ডারউইন ছাড়া যেখানেই এটি zlibব্যবহার করা libtoolযায় না ar;-)।
স্টিফেন কিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.