বিভিন্ন সংকলকগুলি কি উইন্ডোজের জন্য বিভিন্ন মেশিন কোড ফাইল ফর্ম্যাট উত্পাদন করে? [বন্ধ]


-1

উইন্ডোজের অধীনে, কেউ যদি জিসিসি সহ একটি সি ++ উত্স কোডটি সংকলন করে তবে আউটপুট ফাইলের ফর্ম্যাটগুলি এবং এক্সটেনশানগুলি কি অন্য সি ++ সংকলকগুলির থেকে আলাদা হবে?

এবং সি # কম্পাইলারগুলির আউটপুট ফাইল এক্সটেনশন এবং ফর্ম্যাটগুলি কি সি # কম্পাইলারের আউটপুট থেকে আলাদা? অথবা আপনি যা ইচ্ছা আউটপুট ফাইলগুলি চয়ন করতে পারেন?


ফাইল ফর্ম্যাট বলতে কী বোঝ? * .Exe হিসাবে বা .cpp মত সমাধান প্যাকেজ হিসাবে?
অস্টিন টি ফরাসী

হ্যাঁ; উত্পন্ন মেশিন কোডটি কিছুটা আলাদা হবে তবে এটি ঠিক একই পদ্ধতি সম্পাদন করবে। প্রতিটি সংকলক আলাদাভাবে অপ্টিমাইজেশন করবে। আপনি সিসি # সংকলকের আউটপুটকে জিসিসি বা ভিসি ++ সংকলকের আউটপুটটির সাথে তুলনা করতে পারবেন না। আউটপুটগুলির সাথে তুলনাও করা যায় না তারা সম্পূর্ণ আলাদা। এটি বাস্তব প্রশ্নের মতো মনে হচ্ছে না।
রামহাউন্ড

এই সত্যিই স্পষ্ট নয় এবং (কম্পাইলার, linkers, assemblers, এক্সিকিউটেবল ফরম্যাটে ...) উপায় খুব একটা সুযোগ বড় জুড়ে - একটি ভাষা বৈশিষ্ট শুধুমাত্র বলছেন কি এটা করা উচিত না , না এটা কিভাবে যা কি একটি কম্পাইলার, বিদ্যমান এ জন্য প্রথম স্থান.
ব্রেকথ্রু

@ ব্র্যাকথ্রু এই প্রশ্নটি সত্যই এটি সম্পর্কে জিজ্ঞাসা করছে সি ++ এবিআই দেখুন ।
ধনী হোমোলকা 20'14

পরের বার কোনও প্রশ্ন জিজ্ঞাসার আগে দয়া করে যথাসম্ভব সুনির্দিষ্ট হওয়ার চেষ্টা করুন এবং পোস্টের পরে প্রথম কয়েক মিনিটের মধ্যে ঘুরে দেখুন। আপনি এখানে দুর্দান্ত উত্তর পেয়েছেন তবে তারা আপনার মূল উদ্দেশ্যটির উত্তর দেয় না। এখন আমি প্রশ্নটি মুছে ফেলব না কারণ আপনার প্রতিক্রিয়া জানাতে সময় নিয়ে এমন চারজন লোক পেয়েছেন।
slhck

উত্তর:


1

জড়িত রয়েছে বিভিন্ন ধরণের ফাইল।

একটি (প্রচলিত) সংকলক প্রথমে একটি "অবজেক্ট ফাইল" তৈরি করে, যার মধ্যে .c (ইত্যাদি) ফাইলের সাথে সম্পর্কিত নির্দেশাবলী রয়েছে যা সংকলকটির ইনপুট ছিল। এই ফাইলটি "পুনঃস্থাপনযোগ্য" এবং "লিঙ্কযোগ্য", যার অর্থ এটি কোনও নির্দিষ্ট ঠিকানায় লোড হয়েছে বলে ধরে নেওয়া যায় না এবং এটি অন্য কোডের সাথে কেবল "সিম্বলিক" (অর্থাত্ স্ট্রিং) উল্লেখ করে যা এটি কল করে।

"অবজেক্ট ফাইল "টিকে" লিঙ্কার "(বা" লিঙ্ক-লোডার "বা" লিঙ্কেজ সম্পাদক ") ব্যবহার করে অন্যান্য অবজেক্ট ফাইলগুলির সাথে একত্রিত করা হয় যা একটি" এক্সিকিউটেবল "ফাইল তৈরি করে যা পৃথক অবজেক্ট ফাইলগুলির মধ্যে" রেলিজড "এবং এর মধ্যে সমস্ত রেফারেন্স থাকে কমপক্ষে কিছু "স্থানান্তর" (ঠিকানা বরাদ্দ) সম্পন্ন হয়েছে।

এক্সিকিউটেবল ফাইলটি এক্সিকিউটেবল র‌্যামে ফাইলটি অনুলিপি করতে এবং চালনার জন্য প্রস্তুত করার জন্য একটি "লোডার" দ্বারা প্রক্রিয়াজাত করা হয়। "লোডার" কোনও প্রয়োজনীয় চূড়ান্ত "স্থানান্তর" করত, এক্সিকিউটেবলের এন্ট্রি পয়েন্ট ইত্যাদি সনাক্ত করতে পারে

এছাড়াও "লাইব্রেরি ফাইল" থাকতে পারে যা "অবজেক্ট ফাইল" এর এক ধরণের অভিধান যা অন্য অবজেক্ট ফাইল থেকে রেফারেন্সগুলি "সমাধান" করতে ব্যবহৃত হতে পারে। এবং একটি "মডিউল" বা এরকম কিছু (প্ল্যাটফর্ম অনুসারে নাম পরিবর্তিত হয়) হতে পারে যা অবজেক্ট মডিউলগুলির পূর্ব-সংযুক্ত সাবসেট।

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

মনে রাখবেন যে সি # এবং জাভা (এবং বেশ কয়েকটি historicalতিহাসিক ভাষা যেমন ইউসিএসডি পাস্কাল) আলাদা হয়, যেহেতু তারা লিঙ্কযুক্ত, লোড করা এবং সম্পাদন করার পরিবর্তে ব্যাখ্যা করার জন্য ডিজাইন করা "বাইটোকোড" ফাইল তৈরি করে।


0

ফাইল ফর্ম্যাট ফাইল সংগঠন বোঝায়। উইন্ডোজ প্রত্যাশা করে বাইনারি এক্সিকিউটেবল ফাইলগুলি কোনও ধরণের ফর্ম্যাট রাখে। তারা যে ভাষা থেকে সংকলিত হয়েছিল তা বিবেচ্য নয়।

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

সি # সংকলকগণ অবশ্যই সমমানের উত্স কোডের জন্য সি ++ সংকলকগুলির চেয়ে আলাদা বাইনারি তৈরি করবে create


0

যদি কেউ জিসিসি সংকলক দ্বারা সি ++ উত্স কোডটি সংকলন করে তবে আউটপুট ফাইলের ফর্ম্যাটগুলি কি অন্যান্য সি ++ সংকলক আউটপুট থেকে আলাদা হবে?

সম্ভবত। সি ++ কোডটি মেশিন ল্যাঙ্গুয়েজে অনুবাদ করার অনেকগুলি উপায় রয়েছে, বিশেষত x86 / amd64 এ যা বিভিন্ন উপায়ে একত্রিত হতে পারে এমন নির্দেশাবলীর একটি বিস্তৃত বিন্যাস রয়েছে এবং সংকলকরা যদি একই কোডটি নিজেরাই ভাগ না করে তবে তারা সম্ভবত এটি একইভাবে করছেন না । কিছু সাধারণ জিনিস মেলে, যেমন switchবিবৃতি এবং কি না।

দ্বারা "ফাইল ফরম্যাট" আপনি এক্সিকিউটেবল ফরম্যাটে (যেমন উইন্ডোজ পোর্টেবল সম্পাদনযোগ্য ফরম্যাট) মানে, তাহলে কোন কম্পাইলার অর্ডার কিছু চালাতে পারে উৎপন্ন করার জন্য আছে, যাবে।

এবং সি #+ সংকলকগুলির আউটপুট ফাইলের ফর্ম্যাটগুলি কি # # সংকলকের আউটপুট থেকে আলাদা? , বা আপনি যা ইচ্ছা আউটপুট ফাইল চয়ন করতে পারেন?

সুস্পষ্টভাবে, যেমন সি # .NET এর অংশ এবং সিআইএলকে সংকলন করে, নেটিভ কোড নয়। আমি ভিজুয়াল সি ++ দেশীয় বা সিআইএল সংকলনের মধ্যে নির্বাচন করতে দিচ্ছি কিনা তা আমি পুরোপুরি নিশ্চিত নই। আমি বিশ্বাস করি সি # কেবলমাত্র আপনাকে সিআইএল-এ সংকলন করতে দেয়। আমার ভুল হতে পারে.


0

ওহ, জটিল প্রশ্ন ...

এই প্রথম অংশটি, সি ++ সি ++ এর সাথে মেলে কিনা তা সম্পর্কে

এই সমস্ত একই চিপ / আবী ধরে। আমাদের যদি সেই ম্যাচ না হয় তবে আমরা কোনওভাবেই সামঞ্জস্যপূর্ণ হব না। আমাদের 32 বিট x86 কোডের 32 বিট x86 কোডের সাথে বা AMD64 কোডের সাথে 64 বিট এএমডি 64 কোডের মিল রয়েছে need

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

এটি কাজ করে কারণ সি তুলনামূলকভাবে সহজ। আমাদের কী সমন্বয় করতে হবে? ফাংশন নাম এবং ফাংশন কল। এবিআইয়ের মধ্যেই এটিই

2) সি ++ এর জন্য, আমাদের অনেকগুলি নোবস সমন্বিত করতে হবে। কীভাবে আমরা একটি বস্তু রাখি? কিভাবে / কখন আমরা স্থিতিশীল নির্মাণকারী / ধ্বংসকারীদের কল করব? উত্তরাধিকারের জন্য আমরা কীভাবে কোনও জিনিস রাখি? নাকি একাধিক উত্তরাধিকার? ভার্চুয়াল ফাংশন? এমনকি "সাধারণ" জিনিসগুলি যেমন আমরা কীভাবে ফাংশন নামগুলি "ম্যাঙ্গেল" করি (প্রতীক নামের মধ্যে যুক্তিগুলির ধরণের জন্য আমরা কীভাবে প্রতীকটির নাম পরিবর্তন করব)। আমাদের এখানে সিদ্ধান্ত নেওয়ার প্রচুর সিদ্ধান্ত নিয়েছে, আমরা নেমে যেতে পারব different

শুরুতে, সি ++ সংকলক বিক্রেতারা তারা এখানে সবচেয়ে ভাল বলে মনে করেছিল did এটি পড়তে পারে: তারা যা চেয়েছিল তা করেছে এবং সামঞ্জস্যের জন্য নাদাকে যত্ন করেছে, তাই কিছুই ছিল না। পরে তারা বুঝতে পেরেছিল যে এটি সহজে গ্রন্থাগারগুলি বিক্রয় করা অসম্ভব করে তোলে - আপনার প্রতিটি সংকলক সংস্করণ (বা কমপক্ষে সংস্করণগুলির একটি বড় উপসেট) জন্য একটি সি ++ লাইব্রেরি তৈরি করা দরকার।

শেষ পর্যন্ত তারা স্ট্যান্ডার্ড সি ++ এবিআই নিয়ে আসে । এটি একাধিক সংকলকগুলির কোড একসাথে আসার অনুমতি দেয়। কোডটি একে অপরকে যথাযথভাবে কল করতে পারে তা নিশ্চিত করার জন্য এটি লেআউট এবং নামগুলির একটি শক্ত তালিকা।

হ্যাঁ! স্ট্যান্ডার্ডে সমস্ত আধুনিক সংকলক! সবই হয়ে গেল! রাইট?

আসলেই নয় ... প্রথমত, আপনি যদি নতুন এবিআইতে চলে যান তবে এর অর্থ আপনি পুরানো এবিআইয়ের সাথে সামঞ্জস্যপূর্ণ নন। দ্বিতীয়ত, আপনি একটি অনুমানের কোডিং করছেন তবে কোনও গ্যারান্টি নেই যে আপনি এটি সঠিকভাবে পেয়েছেন। জি ++ এর শুরুতে অনুমানটির সাথে মেলে চেষ্টা করার চেষ্টা করে, তারা এটি কয়েকবার ভুল করে ফেলেছিল।

সুতরাং, সি ++ এর সংক্ষিপ্তসার:

একটি অনুমান রয়েছে যা এটি তৈরি করা উচিত যা সংযোজকগুলিতে সি ++ কোডটি সুসংগত করে। তবে এটি নির্ভর করে যে সংকলকগুলি স্পিকে কোড করেছিল কিনা এবং তারা চশমাটি সঠিকভাবে পেয়েছিল কিনা। আধুনিক সংকলকগুলির জন্য (গত ৫ বছরে কিছু) এটি সত্য হওয়া উচিত।

এখন, সি ++ এবং সি # ... সম্পর্কে

সি ++ বলতে বোঝায় চিপ চালানো। সরাসরি এক্স 86 বা এএমডি 64 এ যাই থাকুক না কেন। যেমন, এটি এই নির্দিষ্ট চিপগুলির জন্য অপকডস রয়েছে। চিপ একটি সংখ্যা পড়ে, বুঝতে পারে এটি কোন আদেশটি উপস্থাপন করে এবং এটি যা জিজ্ঞাসা করে তা করে।

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


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