সংকলকরা সাধারণত যে প্ল্যাটফর্মটি ইনস্টল করা আছে তার জন্য কেবল কেবল এক্সিকিউটেবলই কেন উত্পন্ন করে?


10

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

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


5
অনেকগুলি ক্রস-সংকলক রয়েছে: আপনি কেন ক্রস-সংকলন অস্বাভাবিক বলে মনে করেন তা নিশ্চিত not মাইক্রোসফ্ট উইন্ডোজ লক-ইন চায় এমন ভিজ্যুয়াল সি ++ বোধগম্য হয়েছে, তবে তারা ভিএস ২০১ in এ অ্যান্ড্রয়েড সংকলক সরঞ্জাম সরবরাহ করে।

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

আমি মনে করি আপনার এখানে একটি পরিভাষা বোঝার সমস্যা রয়েছে যা বিভ্রান্তিকর হতে পারে। আপনি "ক্রস সংকলক" এবং "ক্রস প্ল্যাটফর্ম সংকলক" বিনিময়যোগ্যভাবে ব্যবহার করছেন তবে সেগুলি বিভিন্ন জিনিস (যদিও সম্পর্কিত): ক্রস সংকলক এমন প্ল্যাটফর্মের জন্য একটি সংকলক যা আপনি ব্যবহার করছেন তার চেয়ে আলাদা, এই ধরণের জিনিসগুলি সংকলকগণের যতক্ষণ পাওয়া যায় ততক্ষণ উপলব্ধ। ..
জুলে

... নূন্যতম পরিবর্তন সহ একাধিক লক্ষ্য প্ল্যাটফর্মের জন্য কোড সংকলনের জন্য। এই জাতীয় জিনিসগুলি একটি সাম্প্রতিক উদ্ভাবন এবং আরও জটিল।
জুলাই

উত্তর:


18

একটি লিনাক্স বাইনারি এক্সিকিউটেবল ফাইল তৈরি করতে উইন্ডোজে ভিজ্যুয়াল সি ++ সংকলক বলার পক্ষে কি অসুবিধা হয়?

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

বিকাশ সরঞ্জামচেনগুলি কেবলমাত্র এমন প্রোগ্রাম যা ইনপুট নেয় এবং আউটপুট উত্পাদন করে। ভিজ্যুয়াল সি ++ x86 অ্যাসেমবিলি তৈরি করে এবং তারপরে এটিকে একটি সিওএফএফ অবজেক্ট ফাইলে রূপান্তর করতে একটি এসেম্বলার ব্যবহার করে। মাইক্রোসফ্ট যদি এটির পরিবর্তে ইএলএফ তৈরি করতে চায় তবে এটি কেবল কোড: সমাবেশ আসবে, ইএলএফ চলে গেল out অবজেক্ট ফাইল বা লাইব্রেরি সম্পর্কে কোনও জাদু নেই; তারা একটি সুস্পষ্ট ফর্ম্যাটে কেবল ডেটা ব্লব're

পাথরের যুগে ফিরে আসা, ক্রস সংকলনটি অনেক বেশি কঠিন ছিল কারণ প্রায়শই না হয়ে আপনি আপনার লক্ষ্য প্ল্যাটফর্মের জন্য যে প্ল্যাটফর্মটি চালাবেন তার জন্য আপনার লক্ষ্য প্ল্যাটফর্মের জন্য টুল চেইনটি লিখতেন। এর অর্থ হ'ল পৃথিবীতে যদি ভ্যাক্স, এম 68 কে এবং আলফা আর্কিটেকচারগুলি থাকত তবে ক্রস-সংকলকগুলির একটি সম্পূর্ণ স্যুইটের মধ্যে বেশিরভাগ স্ক্র্যাচ থেকেই তাদের নয়টি লেখার প্রয়োজন হত। (VAX-to-VAX, VAX-to-M68K, VAX-to-Alpha, M68K-to-VAX, M68K-to-M68K, ইত্যাদি) ভ্যাক্স সংকলকটির কিছু অংশ পুনরায় ব্যবহার করা যেতে পারে এবং এটি অতিরঞ্জনের কিছুটা এবং প্রতিটি টার্গেটের জন্য কোড জেনারেটরের সাথে সংযুক্ত (যেমন, ভ্যাক্স, এম 68 কে এবং আলফা, প্রতিটি ভ্যাক্সের জন্য লিখিত।)

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

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

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


এটি এখন সেরা, সর্বাধিক গভীরতার উত্তর। আমি মনে করি ইতিহাস সত্যই প্রসঙ্গটি বুঝতে সহায়তা করে।
জেসন

3
@ জেসন কখনও কখনও এটি পুরনো হওয়ার জন্য অর্থ প্রদান করে। :-)
ব্লারফ্ল

4
"মাইক্রোসফ্টের পক্ষ থেকে এটি করতে অনাগ্রহতা ছাড়া অন্য কিছু নয়।" - আমি এটিকে "অনিচ্ছুকতা" বলব না। মাইক্রোসফ্ট একটি সার্বজনীন ব্যবসায়িক লাভ-ভিত্তিক ব্যবসা; তাদের শেয়ারহোল্ডার এবং স্টেকহোল্ডারদের কাছে তাদের নির্দিষ্ট দায়িত্ব রয়েছে। তারা ভাড়া করতে হবে, ট্রেন, এবং বেতন ডেভেলপারদের লিনাক্স ব্যাকএন্ড তারা ভাড়া করতে হবে, ট্রেন, এবং বেতন লিনাক্স ব্যাকের জন্য পরীক্ষকগণ, তারা ভাড়া করতে হবে, ট্রেন, এবং বেতন সহায়তা কর্মীদের লিনাক্স ব্যাকএন্ড এর সাথে পরিচিত, তাদের প্ল্যাটফর্মের জন্য কোডটি ডিজাইন, বিকাশ, পরিচালনা, সমর্থন, এবং প্রসারিত করা দরকার ...
জার্গ ডব্লু মিতাগ

... তাদের মূল ব্যবসায়ের বাইরে। এবং এগুলি কেবলমাত্র ইতিমধ্যে বিদ্যমান এন সংকলকগুলিতে একটি n + 1 তম সংকলক যুক্ত করতে যা আপনি ঠিক পাশাপাশি ব্যবহার করতে পারেন। জিসিসি, কলং, আইসিসি (ইন্টেল), এক্সএলসি (আইবিএম), ডিজিটাল মঙ্গল, টিসিসি, পিসি, টেনডিআরএ, মেট্রোওয়ার্কস, পাথস্কেল,… এর সাথে প্রতিযোগিতা করার জন্য মাইক্রোসফ্টের ব্যবসায়িক সুবিধা কী হবে ? ব্যক্তিগতভাবে, আমি মনে করি না যে এর কোনও আছে।
Jörg ডব্লু মিটাগ

3
@ জার্গডব্লিউমিত্যাগ What would be the business benefit ... I don't think there is any.- এটি করতে অনিচ্ছুক একটি ভাল কারণ বলে মনে হচ্ছে।
ব্লারফ্ল

8

হ্যাঁ, আপনার যদি আপনার টার্গেট প্ল্যাটফর্ম সম্পর্কে সমস্ত তথ্য থাকে তবে আপনি কী প্ল্যাটফর্মটি চালিয়ে যাচ্ছেন তা গুরুত্বপূর্ণ নয়।

দুটি সমস্যা রয়েছে যা ক্রপ করতে থাকে:

  1. লোকেরা এতে মনোনিবেশ করে না কারণ এটি খুব কম সাধারণ পরিস্থিতি। প্রায়শই আপনি কেবল সঙ্কলিত ক্রসটিই একটি সংকলক হয় যাতে আপনি ক্রস সংকলন বন্ধ করতে পারেন। কম ফোকাস মানে আরও খারাপ সমর্থন।
  2. নন-তুচ্ছ প্রোগ্রামগুলি কেবল কোডের চেয়ে বেশি প্রয়োজন। আপনি যে প্ল্যাটফর্মটি চালাচ্ছেন তার জন্য লাইব্রেরিগুলি পেয়ে গেলে গ্রন্থাগার অন্তর্ভুক্তি / লিঙ্কেজের সাথে কাজ করা কিছুটা সহজ হয়ে যায়। তারা একটি সুপরিচিত অবস্থানে, একটি সুপরিচিত এনকোডিংয়ে থাকবে।

এগুলি অবশ্যই অনির্বচনীয় নয়। বেশিরভাগ ক্ষেত্রেই, আপনি সংকলকগুলি পান যা তারা যে প্ল্যাটফর্মটি চালিত করে সেগুলিকে লক্ষ্য করে কারণ মানুষ এটিই চায়।


আমি দেখি. সুস্পষ্ট করার জন্য ধন্যবাদ. অবশ্যই এখন আমার আরও বোধগম্য হয়।
জেসন

আমি ইন্টেলিজেন্সকে দোষ দিই।
জেফো

2

আমি আপনার ভিত্তি সঙ্গে একমত। কয়েক মিলিয়ন অ্যান্ড্রয়েড এবং আইওএস বিকাশকারী রয়েছে। এবং তারা সকলেই সম্পূর্ণ ভিন্ন কম্পিউটারের কোড তৈরি করে উইন্ডোজ বা ম্যাকে চলমান সংকলক ব্যবহার করে।

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

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

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


"লক্ষ লক্ষ অ্যান্ড্রয়েড এবং আইওএস বিকাশকারী রয়েছে And এবং তারা সকলেই সম্পূর্ণ ভিন্ন কম্পিউটারের কোড তৈরি করে উইন্ডোজ বা ম্যাকের মধ্যে চলমান সংকলক ব্যবহার করে।" উম না, তারা না। অনেকগুলি, অনেক অ্যান্ড্রয়েড বিকাশকারীরা লিনাক্স ব্যবহার করে এবং স্ট্যাকএক্সচেঞ্জের নিজস্ব জরিপ অনুসারে এটি বিকাশকারীদের পক্ষে এটি সবচেয়ে জনপ্রিয় প্ল্যাটফর্ম।
মাইলস রাউট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.