আমি কি লিনাক্সে একটি উইন্ডোজ .exe ফাইল চালাতে পারি? [প্রতিলিপি]


12

সম্পর্কিত প্রশ্ন:
উইন্ডোজ এক্স-এর লিনাক্সে কাজ করবে না কেন?

উইন্ডোজ .exeফাইলটি কি লিনাক্সে চালানো যেতে পারে?

একই আর্কিটেকচার ব্যবহার করা গেলে কি সম্ভব হবে? উভয় প্রোগ্রাম যদি X86 আর্কিটেকচারে চালিত .exeহয় তবে লিনাক্সে উইন্ডোজ চালানো কি সম্ভব হবে ?

উত্তর:


13

এক্সি ফাইলটি হয় লিনাক্স বা উইন্ডোজের অধীনে কার্যকর করা হবে, তবে উভয়ই নয়।

উইন্ডোজ অধীনে কার্যকর

ফাইলটি যদি উইন্ডোজ ফাইল হয় তবে এটি লিনাক্সের অধীনে চলবে না। সুতরাং যদি এটি হয় তবে আপনি এটি উইন্ডোজ সামঞ্জস্যতা স্তর (ওয়াইন) এর অধীনে চালানোর চেষ্টা করতে পারেন। যদি এটি ওয়াইনের সাথে সামঞ্জস্য না করে তবে আপনি এটি লিনাক্সের আওতায় কার্যকর করতে পারবেন না।

আপনি শুরু করার আগে, আপনার ওয়াইন ইনস্টল করতে হবে। ওয়াইন ইনস্টল করতে আপনার যে পদক্ষেপগুলি প্রয়োজন তা আপনার লিনাক্স প্ল্যাটফর্মের সাথে পৃথক হবে। আপনি সম্ভবত গুগল "উবুন্টু ওয়াইন ইনস্টল করুন" করতে পারেন, উদাহরণস্বরূপ, আপনি উবুন্টু ইনস্টল করছেন।

একবার আপনি ওয়াইন ইনস্টল হয়ে গেলে, আপনি এই আদেশগুলি কার্যকর করতে সক্ষম হবেন।

wine xxx.exe

লিনাক্সের অধীনে কার্যকর করুন

আপনি যদি এই ফাইলটি লিনাক্সের অধীনে চালিত করতে জানেন তবে আপনি এই আদেশগুলি কার্যকর করতে চাইবেন:

আপনি অনুমতি পরিবর্তন ই সব ব্যবহারকারীদের অনুমতি চাইবেন এক্স ecute এই ফাইলটি (ক + X)। আপনি কেবল ব্যবহারকারীকে এক্স এক্সিউট করতে পারবেন (ইউ + এক্স)

chmod a+x xxx.exe

প্রোগ্রামটি চালু করুন, ./কমান্ড লাইনটি ফাইলটি সঞ্চালনের জন্য বর্তমান পাথটি অনুসন্ধান করতে বলে (যদি 'বর্তমান' ডিরেক্টরিটি AT PATH এনভায়রনমেন্ট ভেরিয়েবলের মধ্যে না থাকে)।

./xxx.exe

11

অপারেটিং সিস্টেম (উইন্ডোজ বা লিনাক্স) অ্যাপ্লিকেশনগুলিতে পরিষেবা সরবরাহ করে। উদাহরণস্বরূপ, উইন্ডোজ এবং লিনাক্সের এমন ফাংশন রয়েছে যা অ্যাপ্লিকেশনগুলিকে ফাইল অ্যাক্সেস করতে, নেটওয়ার্ক অ্যাক্সেস করতে, স্ক্রিনে জিনিসগুলি প্রদর্শন করতে, ইত্যাদি কল করতে পারে etc.

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


2
এই উত্তরটি সঠিক। এটি একমাত্র কারণ নয় (বিভিন্ন লোডার এবং এক্সিকিউটেবল ফর্ম্যাটগুলিও কী), তবে এটি তাদের মধ্যে একটি।
ম্যাথু ফ্ল্যাশেন

2
বিভিন্ন অপারেটিং সিস্টেমে আপনার একইরকম এক্সিকিউটেবল রান না চালানো এটির অন্যতম প্রধান কারণ।

1
@ লেট_মে_বি: আসলে আপনার মন্তব্যটি সঠিক নয়।
0xA3

1
@ 0xA3 আপনি যদি প্ল্যাটফর্ম নির্দিষ্ট API এ অ্যাক্সেস করে থাকেন তবে হ্যাঁ। তবে বেশিরভাগ ক্ষেত্রে, এটি আসলে সত্য নয়। সি বা সি ++ স্ট্যান্ডার্ড লাইব্রেরি পুনরায় বাস্তবায়ন করা খুব সহজ, আপনাকে কেবল বাগগুলি পুনরায় প্রয়োগ করতে হবে এবং কলগুলি পুনর্নির্দেশ করতে হবে। যা প্রচুর কাজ নেয় তা হ'ল আলাদা ফাইল ফর্ম্যাট (এবং প্ল্যাটফর্ম নির্দিষ্ট এপিআই এর যেহেতু এগুলি স্ক্র্যাচ থেকে পুনরায় প্রয়োগ করতে হবে)।
onিমন

2
@ চলুন, আমি কখনও বলিনি যে আপনার উচিত should আমি উল্লেখ করছিলাম যে আপনি "বেশিরভাগ অংশে" বলেছেন, প্রোগ্রামগুলি প্ল্যাটফর্ম-নির্দিষ্ট এপিআই ব্যবহার করে না; আসলে, অধিকাংশ না । এমনকি জিটিকে-র মতো ক্রস-প্ল্যাটফর্ম লাইব্রেরি ব্যবহার করে এমন প্রোগ্রামগুলি এখনও প্ল্যাটফর্ম-নির্দিষ্ট API গুলি পরোক্ষভাবে ব্যবহার করে are
ম্যাথু ফ্ল্যাশেন

8

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


5

.Exe ফাইলগুলি সরাসরি লিনাক্সে চলবে না এবং লিনাক্স নির্বাহযোগ্য কেন সরাসরি উইন্ডোজে চলবে না তার তিনটি বড় কারণ রয়েছে।

  1. প্রথমটি হল সিস্টেম কল। সিস্টেম কলগুলি প্রায় সংজ্ঞা অনুসারে, প্ল্যাটফর্ম নির্দিষ্ট। তবে সমস্ত সিস্টেম কল একই হয় না। পোর্টেবল সিস্টেম কল রয়েছে (যেমন সি / সি ++ স্ট্যান্ডার্ড লাইব্রেরি দ্বারা সংজ্ঞায়িত) এবং নন-পোর্টেবল সিস্টেম কল (যেমন পসিক্স বা মাইক্রোসফ্ট দ্বারা সংজ্ঞায়িত)। সিস্টেম লাইব্রেরিগুলির সাথে সংকলনের সময় স্ট্যাটিকালি সংযুক্ত থাকা অ্যাপ্লিকেশনগুলি দেখতে পাবেন যে কোডটির যে অংশটি স্থিরভাবে অন্তর্ভুক্ত রয়েছে সেগুলির প্ল্যাটফর্মের বিস্তৃত নকশার কারণে লক্ষ্য প্ল্যাটফর্মে সম্ভবত সঠিকভাবে সম্পাদন করার কোনও সম্ভাবনা নেই। রানটাইমটিতে গতিশীলভাবে সংযুক্ত থাকা অ্যাপ্লিকেশনগুলিতে কয়েকটি শর্ত দিয়ে চলার সম্ভাবনা রয়েছে: যদি এটি পোর্টেবল সিস্টেম কল হয় তবে টার্গেট প্ল্যাটফর্মের সিস্টেম কলগুলিতে মূল বাইনারিগুলির সিস্টেম কলগুলির মধ্যে একটি অনুবাদ টেবিল রয়েছে; যদি এটি অ-বহনযোগ্য সিস্টেম কল হয়,1 , বিভিন্ন প্ল্যাটফর্মের বৈশিষ্ট্যগুলির বিভিন্ন সেট রয়েছে এবং কিছু বৈশিষ্ট্য অন্যান্য প্ল্যাটফর্মের মধ্যে 2 ) বোঝায় না ।

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

  2. অন্যটি এক্সিকিউটেবল ফরম্যাট। উইন্ডোজ পিই (পোর্টেবল এক্সিকিউটেবল) ফর্ম্যাট ব্যবহার করে এবং লিনাক্স ইএলএফ (এক্সিকিউটেবল এবং লিংকযোগ্য ফর্ম্যাট) ব্যবহার করে। এক্সিকিউটেবল ফর্ম্যাটতে মেটাডেটা রয়েছে এবং প্ল্যাটফর্মের মাধ্যমে এক্সিকিউটেবলকে কীভাবে লোড করা এবং সম্পাদন করা যায় তা নির্ধারণ করে।

    সমাধান: পিই -> ইএলএফ বা ইএলএফ -> পিই রূপান্তরকারী লিখতে সম্পূর্ণ সম্ভব; এবং এটি করা খুব সম্ভবত কঠিন হওয়া উচিত নয় (সতর্কতা: আমি কারওর আসল বিন্যাসের সাথে পরিচিত নই)। আরেকটি উপায় হ'ল একটি এক্সিকিউটেবল লোডার লিখুন যা পিই ফাইলগুলি বুঝতে পারে (যেমন ওয়াইন একটি সরবরাহ করে) বা এক্সিকিউটেবল লোডার যা ইএলএফ ফাইল বুঝতে পারে (আমি বিশ্বাস করি উইন্ডোজের নকশাটি একটি এক্সিকিউটেবল হিসাবে স্থানীয়ভাবে চালিত ডাবল-ক্লিকযোগ্য ফাইলের সম্ভাবনা সীমাবদ্ধ করে)

  3. সিস্টেম কল কল কনভেনশন। লিনাক্স এবং উইন্ডোজ কেবলমাত্র উপলব্ধ সিস্টেম কলগুলির আলাদা সেটই রাখে না, এটির একটি খুব আলাদা সিস্টেম কল কল কনভেনশনও রয়েছে। লিনাক্সে, একটি সিস্টেম কল করার জন্য আপনাকে ইক্স / র্যাক্স রেজিস্টারে সিস্কল নম্বর এবং বাকী রেজিস্টারে আর্গুমেন্ট পাস করুন এবং তারপরে আপনি 0x80 বাধা অনুরোধ করবেন। ডস-এ, আপনি রেজিস্টারটিতে যুক্তিগুলিও পাস করেন, তবে প্রতিটি সিস্টেম পরিষেবার জন্য আলাদা বিঘ্নিত অনুরোধ নম্বর থাকে যাতে আপনি ইক্স / র্যাকসে সিস্টেম কল নম্বরটি পাস না করে। উইন্ডোজ এনটি লিনাক্সের সাথে আরও সমান, তবে 0x80 এর পরিবর্তে আপনি 0x2E বিঘ্নিত অনুরোধ উত্থাপন করেন, তবে সিস্টেম কল নম্বরটি এখনও পৃথক হয় (সুতরাং আপনার সিস্টেল নম্বর অনুবাদ টেবিল এবং সম্ভবত একটি উপযুক্ততা স্তর প্রয়োজন)।

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

অন্যান্য বিভিন্ন কারণ রয়েছে, তবে আমি বিশ্বাস করি যে এই তিনটিই বড় হোঁচট খায়।

1 ফাইল সিস্টেম সুরক্ষা মাথায় আসে, লিনাক্সের সুরক্ষা বিট এবং উইন্ডোজের এনটিএফএস এসিএল এর মধ্যে অনুবাদ করার কোনও উপায় নেই।

2 উইন্ডোজ কোনও প্রক্রিয়া কাঁটাচামচ করতে পারে না; ক্রিয়েটপ্রসেস কিছুটা কাঁটা অনুকরণ করতে ব্যবহার করা যেতে পারে তবে এটি অনুলিপি-অনুলিপি হারিয়ে ফেলে। উইন্ডোজে কোনও অনুলিপি অনুলিপি তৈরি করার উপায় নেই no

3 আমি বিশ্বাস করি ওয়াইন এটি করে


1

এটা সম্ভব লুকিং ওয়াইন


পল @ আমি ওয়াইন চাই না ... আমি প্রোগ্রামিং সম্পর্কে কথা বলছি ... সংকলনের পরে আমি এক্সিকিউটেবল পাওয়ার পরে। উইন্ডো এবং লিনাক্স উভয়ই যে এই নির্বাহযোগ্য চালানো যেতে পারে

1
উইকিপিডিয়া নিবন্ধটি WINE কেন প্রয়োজন তার উচ্চ স্তরের বিশদ দেয়।
পল হিলান

1

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

mono myapp.exe

আমি জানি এটি ঠিক আপনি যা খুঁজছেন তা নয়, তবুও উত্তরটি আপনি লিনাক্সে কয়েকটি এক্স ফাইল চালাতে পারেন ।


1

উইন, লিনাক্স (বা এমনকি ম্যাক) এ এক্সিকিউটেবলগুলি চালনার একমাত্র উপায়টি সমাবেশ এবং ওএসের নির্দেশাবলীর মধ্যে এক ধরণের "ভার্চুয়াল স্তর" রয়েছে, লুকাশের মনো এর অধীনে এটি চালনার এক উপায় যা জাভা তৈরির মতো is ফাইল (বা একটি অ্যাডোব এয়ার)।

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

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