লিনাক্স মধ্যে গ্রন্থাগার সংস্করণ এবং কিভাবে এটি সমস্ত কাজে ব্যবহার করা সম্পর্কে আরও জানতে চেষ্টা করছি। এখানে প্রসঙ্গে:
-, আমি যা ইন্টারফেসগুলি একই সেট এক্সপোজ একটি গতিশীল লাইব্রেরি দুটি সংস্করণ আছে libsome1.so
এবং libsome2.so
।
- একটি আবেদন বিরুদ্ধে লিঙ্ক করা হয় libsome1.so
।
- এই অ্যাপ্লিকেশনটি ব্যবহারের libdl.so
পরিবর্তনশীল অন্য মডিউল লোড করতে বলে libmagic.so
।
- এখন libmagic.so
বিরুদ্ধে লিঙ্ক করা হয়েছে libsome2.so
। স্পষ্টতই, লিংক স্ক্রিপ্টগুলি ব্যবহার না করে প্রতীকগুলি লুকানোর জন্য libmagic.so
, রান-টাইমে ইন্টারফেসের সমস্ত কলগুলি libsome2.so
সমাধান হয়ে যায় libsome1.so
। libVersion()
ম্যাক্রোর মানটির বিপরীতে ফিরিয়ে দেওয়া মানটি পরীক্ষা করে এটি নিশ্চিত করা যায় LIB_VERSION
।
- তাই আমি এবং কম্পাইল করার পরবর্তী লিঙ্কে চেষ্টা libmagic.so
একটি linker স্ক্রিপ্ট 3 ছাড়া সমস্ত চিহ্ন যা সংজ্ঞায়িত করা হয় লুকায় সঙ্গে libmagic.so
এবং এটির রপ্তানি করা হয়। এই কাজ ... বা অন্তত libVersion()
এবং LIB_VERSION
মান মেলে (এবং সংস্করণ 2 না 1 রিপোর্ট)।
- তবে, যখন কিছু ডেটা স্ট্রাকচার ডিস্কে ধারাবাহিকভাবে হয়, আমি কিছু দুর্নীতির লক্ষ্য। অ্যাপ্লিকেশানের ডিরেক্টরির মধ্যে যদি আমি মুছতে libsome1.so
এবং বিন্দু তার জায়গায় একটি নরম লিঙ্ক তৈরি libsome2.so
, সবকিছু যে কাজ করছে বলে আশা করা এবং একই দুর্নীতির ঘটে না।
আমি কিন্তু সাহায্য মনে করেন যে, এই চিহ্ন রান-টাইম linker এর রেজোলিউশনের কিছু বিবাদের কারণে কারণে হয়ে থাকতে পারে করতে পারবে না। আমি অনেক কিছু চেষ্টা করেছি লিংক বের করার চেষ্টা মত, libsome2.so
যাতে সব চিহ্ন alised হয় symbol@@VER_2
(যা আমি এখনও কারণ কমান্ড সম্পর্কে বিভ্রান্ত করছি nm -CD libsome2.so
এখনো তালিকা প্রতীক symbol
এবং symbol@@VER_2
) ... কিছুই কাজ বলে মনে হয় !!! সাহায্য !!!!!!
RTLD_LOCAL
এবং RTLD_DEEPBIND
আপনি অ্যাপ্লিকেশন dlopen পতাকা। আমার এখনই এটি পরীক্ষা করার সময় নেই তবে এটি ম্যানপেজের ভিত্তিতে কাজ করা উচিত।