bash: ./program: বাইনারি ফাইল কার্যকর করতে পারে না: এক্সিকিউট ফর্ম্যাট ত্রুটি


91

আমি একটি প্রোগ্রাম চালানোর চেষ্টা করছি, তবে একটি ত্রুটি এরকম ঘটে:

bash: ./program: cannot execute binary file: Exec format error

ফলাফল file programছিল:

program: ELF-32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked(uses share libs), for GNU/LINUX 2.6.16, not stripped

আমি কীভাবে এই ত্রুটিটি ঠিক করতে পারি?

আমি VMware এর সাথে উবুন্টু 14.04.2 (amd64) ব্যবহার করছি। আমি উবুন্টু আই 386 দিয়েও চেষ্টা করেছি, তবে ফলাফলটি একই ছিল।


4
এটি একটি এআরএম এক্সিকিউটেবল, অর্থাৎ আপনি ভুল নির্বাহযোগ্য ফর্ম্যাটটি ডাউনলোড করেছেন বা ভুল প্ল্যাটফর্মের জন্য সংকলিত। আপনাকে সঠিক সম্পাদনযোগ্য বা পুনরায় সংকলন করতে হবে।
কার্ল রিখটার

উত্তর:


76

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

আপনার যদি এই নির্বাহযোগ্য চালনার দরকার হয় তবে আপনার দুটি পছন্দ আছে:

  1. এক্সিকিউটেবলের একটি x86-64 সংস্করণ পান (যে কোনও উপায়ে; যদি আপনি এক্সিকিউটেবলের একটি x86-64 সংস্করণ পেতে অক্ষম হন তবে আপনি এর উত্স কোডটি পেতে সক্ষম হন তবে আপনি ভার্চুয়াল মেশিনে এটি পুনরায় সংকলনের চেষ্টা করতে পারেন) );

  2. উবুন্টু 14.04.2 (এএমডি 64) এর জায়গায় আরএমের জন্য উবুন্টু সার্ভার ইনস্টল করুন । এর জন্য হয় একটি এআরএম আর্কিটেকচারে চলমান একটি প্রকৃত মেশিন বা ভার্চুয়ালাইজেশন সফ্টওয়্যার প্রয়োজন যা এটি অনুকরণ করতে পারে।


22

আপনি যদি কোনও 32-বিট প্ল্যাটফর্মের এক্স xu- থেকে 64 এক্সিকিউটেবল চালনার চেষ্টা করেন তবে এটিও ঘটতে পারে।

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


8

যদি আপনি বিনফম্যাট-সমর্থনBinfmt- সমর্থন ইনস্টল করুন , qemuকিমু ইনস্টল করুন , এবং qemu- ব্যবহারকারী-স্ট্যাটিকQemu- ব্যবহারকারী-স্ট্যাটিক ইনস্টল করুন প্যাকেজ ইনস্টল করেন তবে একটি amd64 সিস্টেমে একটি ARM এক্সিকিউটেবল ইমেজ চালানো প্রায়শই সম্ভব :

sudo apt install binfmt-support qemu qemu-user-static

qemuআপনি যখন এক্সিকিউটেবল চালাবেন তখন সিস্কল অনুকরণটি সম্পাদন করবে। এটি বেশিরভাগ এআরএম বাইনারিগুলির জন্য কাজ করে তবে কয়েকটি রয়েছে যা সঠিকভাবে চলতে পারে না।


sudo apt-get binfmt-ملاتړ কায়েমু কিমু-ইউজার-স্ট্যাটিক ইনস্টল করুন
মমিন আল আজিজ

7

নিম্নলিখিত ত্রুটিগুলি সত্য হলে এই জাতীয় ত্রুটি ঘটতে পারে:

  • এক্সিকিউটেবল কোনও ফাইল নয় বরং একটি লিঙ্ক
  • আপনি এটি ভিএম এর ভিতরে চালান
  • ফাইল ভাগ করা ফোল্ডারে অবস্থিত
  • আপনার হোস্টটি উইন্ডোজ।

যদি আপনি এই ফাইলটি পেয়ে থাকেন তবে আসুন, সংরক্ষণাগারটিতে বলুন - এটি ভিএম এর মধ্যে আনপ্যাক করার চেষ্টা করুন, ভার্চুয়াল ড্রাইভের কিছু ডিরেক্টরিতে, আপনার হোস্ট মেশিন হার্ড ড্রাইভে ফোল্ডার ম্যাপ করা হয়নি, উদাহরণস্বরূপ /myNewDir/


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

2

আপনাকে অবশ্যই একটি উপযুক্ত সিপিইউ আর্কিটেকচার (x86 উদাহরণস্বরূপ) ব্যবহার করে আপনার ফাইলটি সঙ্কলন করতে হবে এবং আপনার লিনাক্স মেশিনে .exe ফাইলটি অনুলিপি করতে হবে। তারপরে আপনি আপনার লিনাক্স মেশিনে মনো ইনস্টল করতে পারেন এবং নিম্নলিখিত কমান্ডটি জারি করতে পারেন:

mono myprogram.exe

2

যদি javaসিস্টেমে একাধিক ইনস্টল করা থাকে তবে এটি ঘটতে পারে এবং এটি ডিফল্ট হিসাবে সেট করা যায় না। উবুন্টু ১৪.০৪ এ LTS- এ আমি নিম্নলিখিতটি সম্পাদন করে এবং javaআমার প্রয়োজনীয়টি বেছে নিয়ে সমাধান করতে পারি।

sudo update-alternatives --config java
[sudo] password for user: 
update-alternatives: warning: /etc/alternatives/java has been changed (manually or by a script); switching to manual updates only
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1069      manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in manual mode

আমি 2 বেছে নিই এবং openjdk-8ডিফল্ট হিসাবে সেট করি । যা দেখায়নি Exec format error


0

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

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