64-বিট ভিএম-তে 32-বিট প্রোগ্রাম চালাতে অক্ষম


12

আমি উবুন্টু 10.04 32 বিট মেশিনে একটি ছোট "হ্যালো ওয়ার্ল্ড" সি প্রোগ্রাম কম্পাইল করেছি। তারপরে আমি উবুন্টু 12.10 (64 বিট) ভিএমওয়্যার ভার্চুয়াল মেশিনে এক্সিকিউটেবল (a.out) রেখেছি এবং এটি (./ a.out) কার্যকর করার চেষ্টা করেছি। ওএস ফাইলটি সনাক্ত করে না এবং বলে 'এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই'। কিন্তু যখন আমি exec৪ বিটের ল্যাপটপে চালিত কোনও উবুন্টু ১২.১০ (bit৪ বিট) তে একই এক্সিকিউটেবল রাখি তখন এটি ঠিকঠাক হয় এবং আমি পছন্দসই আউটপুট পাই। ভিএম আইবিএম ব্লেড সার্ভারে চলছে। আমি জানতে চেয়েছিলাম কেন একটি ভিএম এর ফলাফল?

উত্তর:


20

বার্তা No such file or directoryআপনার এক্সিকিউটেবল ফাইল পড়ুন না: a.out। পরিবর্তে এটি কোনও সহায়ক প্রোগ্রামকে বোঝায় যা 32 বিট গতিশীল সংযুক্ত এক্সিকিউটেবল চালনার প্রয়োজন a.out

এখন, আমি এই সুন্দর নিবন্ধে এইগুলির সমস্তগুলি খুব ভালভাবে ব্যাখ্যা করতে পেরেছি:

স্থিতিশীল এবং গতিশীল সংযোগ

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

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

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


3
এই "কোনও ফাইল খুঁজে পাওয়া যায়নি" ত্রুটি বার্তাটি আমাকে প্রথমবারও বিভ্রান্ত করেছিল then ͜ ͜ then, তারপরে আমি বুঝতে পেরেছিলাম অ্যাপটির প্রয়োজনীয় কিছু ফাইল অনুপস্থিত।
রামচন্দ্র অপ্টে

@ রাদু রেডানু, আপনি কোন সহায়ক প্রোগ্রামকে কী বলে? আমি গতিশীলভাবে সংযুক্ত লাইব্রেরি অনুমান করি। যদি তা হয় তবে এটিকে সহায়ক প্রোগ্রাম বলার ফলে ব্যাখ্যার মধ্যে কেবল বিশৃঙ্খলা সৃষ্টি হয়।
গোলেম

এই সমস্যাটি বোঝার জন্য আমি এখানে একটি লিঙ্কটি দরকারী বলে মনে করি - একটি 64-বিট সিস্টেমে 32-বিট বাইনারি চালানোর সময় "খুঁজে পাওয়া যায় না" বার্তাটি পাওয়া
Golem
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.