লিনাক্স মধ্যে গ্রন্থাগার সংস্করণ এবং কিভাবে এটি সমস্ত কাজে ব্যবহার করা সম্পর্কে আরও জানতে চেষ্টা করছি। এখানে প্রসঙ্গে:
-, আমি যা ইন্টারফেসগুলি একই সেট এক্সপোজ একটি গতিশীল লাইব্রেরি দুটি সংস্করণ আছে 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 পতাকা। আমার এখনই এটি পরীক্ষা করার সময় নেই তবে এটি ম্যানপেজের ভিত্তিতে কাজ করা উচিত।