সি তে একটি অবজেক্ট ফাইল কী?


140

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


এই একটি আরো সক্রিয় সংস্করণ: stackoverflow.com/questions/12122446/...
সিরো Santilli郝海东冠状病六四事件法轮功

উত্তর:


153

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

কোনও লিঙ্কার এই সমস্ত অবজেক্ট ফাইলগুলিকে নিয়ে যায় এবং এগুলিকে একটি এক্সিকিউটেবল গঠনে একত্রিত করে (ধরে নিতে পারে যে এটি পারে, যেমন: কোনও সদৃশ বা অপরিবর্তিত চিহ্ন নেই)। প্রচুর সংকলক আপনার জন্য এটি করবে (পড়ুন: তারা নিজেরাই লিংক চালায়) আপনি যদি তাদের কমান্ড-লাইন বিকল্পগুলি ব্যবহার করে "কেবল সংকলন" করতে না চান। ( -cএকটি সাধারণ "কেবল সংকলন; লিঙ্ক করবেন না" বিকল্প।)


প্রকৃতপক্ষে, বেশিরভাগ সংকলকগুলির সাথে, সংকলন পর্বের আউটপুটটি অ্যাসেম্বলি কোড হয় এবং সংকলক তারপরে এসেম্বলারের অনুরোধ করে এটি একটি বস্তু ফাইলে পরিণত করে।
ক্রিস ডড

15
@ ক্রিসডডড: পুরানো সংকলকগুলির ক্ষেত্রে এটি প্রায়শই ছিল। এই দিনগুলিতে, কোনও সংকলক যদি আপনার কাছে না জিজ্ঞাসা করে, এবং এটি প্রায়শই অভ্যন্তরীণভাবে ব্যবহার না করে তবে এসেম্বলি কোড তৈরি করে না। তবে যে কোনও উপায়েই, সমাবেশটি সংকলন পর্বের একটি উপ-পর্ব হবে, সুতরাং যা কিছু ঘটছে তা।
সিএওও

2
একটি একক অবজেক্ট ফাইল এক্সিকিউটেবল হতে পারে?
মধু

1
@ মধু: সাধারণত, না এমনকি যদি বস্তু ফাইলটি কার্যকর করার জন্য ডিজাইন করা বিন্যাসে থাকে (যা এটি মূলত কখনই হয় না) তবে "কাজ করার জন্য এটির প্রতীকগুলি" সম্পর্কে সেই অংশটি মূলত চুক্তিটিকে হত্যা করে। এমনকি আপনার স্ট্যান্ডার্ড "হ্যালো ওয়ার্ল্ড" এর জন্য সি রানটাইম লাইব্রেরির সাথে লিঙ্ক করা প্রয়োজন।
সিএওও

74
  1. একটি অবজেক্ট ফাইল হ'ল সংকলিত ফাইল। দুজনের মধ্যে কোনও পার্থক্য নেই।

  2. অবজেক্ট ফাইলগুলি লিঙ্ক করে একটি এক্সিকিউটেবল ফাইল গঠিত হয়।

  3. অবজেক্ট ফাইলে নিম্ন স্তরের নির্দেশাবলী রয়েছে যা সিপিইউ দ্বারা বোঝা যায়। এজন্য এটিকে মেশিন কোডও বলা হয়।

  4. এই নিম্ন স্তরের মেশিন কোডটি সেই নির্দেশাবলীর দ্বিপাক্ষিক প্রতিনিধিত্ব যা আপনি সরাসরি সমাবেশ ভাষা ব্যবহার করে সরাসরি লিখতে পারেন এবং তারপরে এসেম্বলারের সাহায্যে অ্যাসেম্বলি ভাষা কোড (ইংরাজীতে উপস্থাপিত) মেশিন ল্যাঙ্গুয়েজে (হেক্সে উপস্থাপিত) প্রসেস করতে পারেন।

সি এর মতো উচ্চ স্তরের ভাষায় কোডের জন্য এই প্রক্রিয়াটির জন্য এখানে একটি সাধারণ উচ্চ স্তরের প্রবাহ রয়েছে

-> প্রাক প্রসেসরের মাধ্যমে যায়

-> অপ্টিমাইজড কোড দেওয়ার জন্য, এখনও সি তে

-> সংকলক মাধ্যমে যায়

-> সমাবেশ কোড দিতে

-> একটি সমাবেশকারীর মাধ্যমে যায় goes

-> মেশিন ভাষায় কোড দেওয়ার জন্য যা OBJECT ফাইলগুলিতে সংরক্ষিত থাকে

-> লিংকার দিয়ে যায়

-> একটি এক্সিকিউটেবল ফাইল পেতে।

এই প্রবাহে কিছু বৈকল্পিকতা থাকতে পারে উদাহরণস্বরূপ, বেশিরভাগ সংকলক সরাসরি কোনও মেশিনের ভাষা ছাড়াই মেশিনের ভাষা কোড তৈরি করতে পারে। একইভাবে, তারা আপনার জন্য প্রাক প্রক্রিয়াজাতকরণ করতে পারে। তবুও, আরও ভাল বোঝার জন্য উপাদানগুলি ভেঙে দেওয়া ভাল।


5
অপ্টিমাইজড কোডটি প্রাক-প্রসেসরের পর্যায়ে বা এর ঠিক পরে তৈরি হচ্ছে না। প্রাক-প্রসেসর কেবল তার নিজস্ব ভাষার সাথেই ডিল করে it সংকলন এবং সমাবেশের পর্যায়ে অপ্টিমাইজেশন ঘটে।
Ignas2526

মেশিন ল্যাঙ্গুয়েজে এক্সিকিউটেবল ফাইলের মতো একই সংকলন করার পরে আমরা যে অবজেক্ট ফাইলটি পেয়েছি তা কি। আমি বিভ্রান্ত কারণ আপনি বলেছেন যে অবজেক্ট ফাইলটি শেষ এবং শেষ ধাপের দ্বিতীয় ধাপে তৈরি করা হয় এক্সিকিউটেবল ফাইল। সুতরাং, সংকলনের পরে আমরা .0 ফাইলটি পাই, এটি কি এক্সিকিউটেবল ফাইল?
AV94

একটি একক বস্তু ফাইলও কার্যকর হতে পারে না?
মধু

33

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, যা এলডি ওপরে একটি মোড়ক।


11

যখন আপনি একটি (বা বেশ কয়েকটি) উত্স ফাইল (গুলি) সংকলন করেন তখন কোনও অবজেক্ট ফাইলটি আপনি যা পান তা হ'ল।

এটি হয় পুরোপুরি সমাপ্ত এক্সিকিউটেবল বা গ্রন্থাগার, বা মধ্যবর্তী ফাইল হতে পারে।

অবজেক্ট ফাইলগুলিতে সাধারণত নেটিভ কোড, লিংক সম্পর্কিত তথ্য, ডিবাগিং প্রতীক এবং আরও কিছু থাকে।


2

অবজেক্ট ফাইল হ'ল এমন কোড যা প্রোগ্রাম চালানোর জন্য ফাংশন, চিহ্ন এবং পাঠ্যের উপর নির্ভরশীল। পুরানো টেলিক্স মেশিনের মতোই, অন্য টেলিক্স মেশিনে সংকেত প্রেরণের জন্য টেলিপলক প্রয়োজন।

একইভাবে প্রসেসরের চালনার জন্য বাইনারি কোডের প্রয়োজন হয়, অবজেক্ট ফাইলগুলি বাইনারি কোডের মতো তবে লিঙ্কযুক্ত নয়। লিঙ্কিং অতিরিক্ত ফাইল তৈরি করে যাতে ব্যবহারকারীকে নিজে সি ভাষা সংকলন করতে না হয়। যখন অবজেক্ট ফাইলটি সি ভাষা, বা ভিবি ইত্যাদির মতো কিছু সংকলকের সাথে সংযুক্ত হয়ে যায় তখন ব্যবহারকারীরা এক্সাই ফাইলটি সরাসরি খুলতে পারে

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