আমি সি-তে লাইব্রেরিগুলি সম্পর্কে পড়ছি তবে কোনও অবজেক্ট ফাইল কী তা সম্পর্কে আমি এখনও কোনও ব্যাখ্যা পাইনি। অন্য কোনও সংকলিত ফাইল এবং একটি অবজেক্ট ফাইলের মধ্যে আসল পার্থক্য কী?
কেউ যদি মানুষের ভাষায় ব্যাখ্যা করতে পারে তবে আমি খুশি হব।
আমি সি-তে লাইব্রেরিগুলি সম্পর্কে পড়ছি তবে কোনও অবজেক্ট ফাইল কী তা সম্পর্কে আমি এখনও কোনও ব্যাখ্যা পাইনি। অন্য কোনও সংকলিত ফাইল এবং একটি অবজেক্ট ফাইলের মধ্যে আসল পার্থক্য কী?
কেউ যদি মানুষের ভাষায় ব্যাখ্যা করতে পারে তবে আমি খুশি হব।
উত্তর:
একটি অবজেক্ট ফাইল হ'ল সংকলন পর্বের আসল আউটপুট। এটি বেশিরভাগ মেশিন কোডই রয়েছে তবে তথ্য রয়েছে যা কোনও লিঙ্কারকে এটি দেখতে দেয় যে এটিতে কী কী চিহ্ন রয়েছে এবং সেই সাথে প্রতীকগুলি কাজ করতে প্রয়োজন। (রেফারেন্সের জন্য, "প্রতীক" হ'ল মূলত গ্লোবাল অবজেক্টস, ফাংশন ইত্যাদির নাম)
কোনও লিঙ্কার এই সমস্ত অবজেক্ট ফাইলগুলিকে নিয়ে যায় এবং এগুলিকে একটি এক্সিকিউটেবল গঠনে একত্রিত করে (ধরে নিতে পারে যে এটি পারে, যেমন: কোনও সদৃশ বা অপরিবর্তিত চিহ্ন নেই)। প্রচুর সংকলক আপনার জন্য এটি করবে (পড়ুন: তারা নিজেরাই লিংক চালায়) আপনি যদি তাদের কমান্ড-লাইন বিকল্পগুলি ব্যবহার করে "কেবল সংকলন" করতে না চান। ( -cএকটি সাধারণ "কেবল সংকলন; লিঙ্ক করবেন না" বিকল্প।)
একটি অবজেক্ট ফাইল হ'ল সংকলিত ফাইল। দুজনের মধ্যে কোনও পার্থক্য নেই।
অবজেক্ট ফাইলগুলি লিঙ্ক করে একটি এক্সিকিউটেবল ফাইল গঠিত হয়।
অবজেক্ট ফাইলে নিম্ন স্তরের নির্দেশাবলী রয়েছে যা সিপিইউ দ্বারা বোঝা যায়। এজন্য এটিকে মেশিন কোডও বলা হয়।
এই নিম্ন স্তরের মেশিন কোডটি সেই নির্দেশাবলীর দ্বিপাক্ষিক প্রতিনিধিত্ব যা আপনি সরাসরি সমাবেশ ভাষা ব্যবহার করে সরাসরি লিখতে পারেন এবং তারপরে এসেম্বলারের সাহায্যে অ্যাসেম্বলি ভাষা কোড (ইংরাজীতে উপস্থাপিত) মেশিন ল্যাঙ্গুয়েজে (হেক্সে উপস্থাপিত) প্রসেস করতে পারেন।
সি এর মতো উচ্চ স্তরের ভাষায় কোডের জন্য এই প্রক্রিয়াটির জন্য এখানে একটি সাধারণ উচ্চ স্তরের প্রবাহ রয়েছে
-> প্রাক প্রসেসরের মাধ্যমে যায়
-> অপ্টিমাইজড কোড দেওয়ার জন্য, এখনও সি তে
-> সংকলক মাধ্যমে যায়
-> সমাবেশ কোড দিতে
-> একটি সমাবেশকারীর মাধ্যমে যায় goes
-> মেশিন ভাষায় কোড দেওয়ার জন্য যা OBJECT ফাইলগুলিতে সংরক্ষিত থাকে
-> লিংকার দিয়ে যায়
-> একটি এক্সিকিউটেবল ফাইল পেতে।
এই প্রবাহে কিছু বৈকল্পিকতা থাকতে পারে উদাহরণস্বরূপ, বেশিরভাগ সংকলক সরাসরি কোনও মেশিনের ভাষা ছাড়াই মেশিনের ভাষা কোড তৈরি করতে পারে। একইভাবে, তারা আপনার জন্য প্রাক প্রক্রিয়াজাতকরণ করতে পারে। তবুও, আরও ভাল বোঝার জন্য উপাদানগুলি ভেঙে দেওয়া ভাল।
3 ধরণের অবজেক্ট ফাইল রয়েছে।
একটি এক্সিকিউটেবল অবজেক্ট ফাইল তৈরি করার জন্য মেশিন কোডটি এমন একটি ফর্মের সাথে যা লিঙ্কের সময়ে অন্যান্য স্থানান্তরযোগ্য অবজেক্ট ফাইলগুলির সাথে একত্রিত করা যেতে পারে।
আপনার যদি a.cসোর্স ফাইল থাকে তবে এটির জিসিসি দিয়ে তার অবজেক্ট ফাইলটি তৈরি করতে আপনার চালানো উচিত:
gcc a.c -c
সম্পূর্ণ প্রক্রিয়াটি হ'ল: প্রিপ্রেসেসর (সিপিপি) এসি দিয়ে চলে যাবে এর আউটপুট (এখনও উত্স) সংকলক (সিসি 1) এ ফিড করবে। এর আউটপুট (সমাবেশ) এসেম্বলারের (যেমন) মধ্যে ফিড দেবে, যা উত্পাদন করবে relocatable object file। এই ফাইলটিতে অবজেক্ট কোড এবং লিঙ্কিং (এবং যদি -gব্যবহৃত হয় তবে ডিবাগিং ) মেটাডেটা রয়েছে এবং এটি সরাসরি সম্পাদনযোগ্য নয়।
বিশেষ ধরণের পুনঃস্থাপনযোগ্য অবজেক্ট ফাইল যা গতিসম্পন্নভাবে লোড সময় বা রান সময়ে লোড করা যায়। ভাগ করা গ্রন্থাগারগুলি এই ধরণের বস্তুর উদাহরণ an
মেশিন কোড ধারণ করে যা সরাসরি মেমোরিতে লোড করা যায় (লোডার দ্বারা, যেমন সম্পাদন করুন ) এবং পরে সম্পাদিত হয়।
একাধিকের উপরে লিঙ্কার চালানোর ফলাফলটি relocatable object filesএকটি executable object file। লিঙ্কার কমান্ড লাইন থেকে সমস্ত একই ধরণের ইনপুট বিভাগগুলি (যেমন .data) একই ধরণের আউটপুট বিভাগে মার্জ করে কমান্ড লাইন থেকে সমস্ত ইনপুট অবজেক্ট ফাইলগুলিকে একত্রিত করে । এটি ব্যবহার করে symbol resolutionএবং relocation।
static libraryইনপুট অবজেক্টে রেফারেন্সযুক্ত কোনও ফাংশনের সাথে লিঙ্ক করার সময় চূড়ান্ত নির্বাহযোগ্যতে অনুলিপি করা হয়। সঙ্গে dynamic librariesএকটি প্রতীক টেবিল তৈরি করেছি যে একটি গতিশীল লাইব্রেরির ফাংশন / globals সঙ্গে লিঙ্ক সক্ষম করবে। সুতরাং, ফলাফলটি একটি আংশিক সম্পাদনযোগ্য অবজেক্ট ফাইল যা এটি লাইব্রেরির উপর নির্ভর করে। যদি গ্রন্থাগারটি না থাকে তবে ফাইলটি আর কার্যকর করতে পারে না)।
লিঙ্কিং প্রক্রিয়াটি নিম্নলিখিতভাবে করা যেতে পারে:
ld a.o -o myexecutable
কমান্ড: gcc a.c -o myexecutableপয়েন্ট 1 এবং বিন্দু 3 তে উল্লিখিত সমস্ত কমান্ড আহ্বান করবে (সিপিপি -> সিসি 1 -> হিসাবে -> এলডি 1 )
1: আসলে সংগ্রহ 2, যা এলডি ওপরে একটি মোড়ক।
অবজেক্ট ফাইল হ'ল এমন কোড যা প্রোগ্রাম চালানোর জন্য ফাংশন, চিহ্ন এবং পাঠ্যের উপর নির্ভরশীল। পুরানো টেলিক্স মেশিনের মতোই, অন্য টেলিক্স মেশিনে সংকেত প্রেরণের জন্য টেলিপলক প্রয়োজন।
একইভাবে প্রসেসরের চালনার জন্য বাইনারি কোডের প্রয়োজন হয়, অবজেক্ট ফাইলগুলি বাইনারি কোডের মতো তবে লিঙ্কযুক্ত নয়। লিঙ্কিং অতিরিক্ত ফাইল তৈরি করে যাতে ব্যবহারকারীকে নিজে সি ভাষা সংকলন করতে না হয়। যখন অবজেক্ট ফাইলটি সি ভাষা, বা ভিবি ইত্যাদির মতো কিছু সংকলকের সাথে সংযুক্ত হয়ে যায় তখন ব্যবহারকারীরা এক্সাই ফাইলটি সরাসরি খুলতে পারে