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 के साथ Ubuntu 14.04.2 (amd64) का उपयोग कर रहा हूं। मैंने Ubuntu i386 के साथ भी कोशिश की, लेकिन परिणाम वही था।


4
यह एक एआरएम निष्पादन योग्य है, यानी आपने गलत निष्पादन योग्य प्रारूप डाउनलोड किया है या गलत प्लेटफॉर्म के लिए संकलित किया गया है। आपको सही निष्पादन योग्य या recompile प्राप्त करना होगा।
कार्ल रिक्टर

जवाबों:


76

आप एक x86-64 आर्किटेक्चर पर एआरएम आर्किटेक्चर के लिए संकलित एक निष्पादन योग्य चलाने की कोशिश कर रहे हैं, जो आपके प्रोसेसर से पूछने के लिए बहुत पसंद है जो केवल चीनी में निर्देश लेने के लिए अंग्रेजी बोलता है।

यदि आपको उस निष्पादन योग्य को चलाने की आवश्यकता है तो आपके पास दो विकल्प हैं:

  1. निष्पादन योग्य का x86-64 संस्करण प्राप्त करें (किसी भी माध्यम से; यदि आप निष्पादन योग्य का x86-64 संस्करण प्राप्त करने में असमर्थ हैं, लेकिन आप इसका स्रोत कोड प्राप्त करने में सक्षम हैं, तो आप इसे वर्चुअल मशीन पर फिर से जोड़ने का प्रयास कर सकते हैं। );

  2. Ubuntu 14.04.2 (amd64) के स्थान पर ARM के लिए Ubuntu सर्वर स्थापित करें । इसके लिए या तो एआरएम आर्किटेक्चर पर चलने वाली एक भौतिक मशीन या एक वर्चुअलाइजेशन सॉफ़्टवेयर की आवश्यकता होती है जो इसका अनुकरण कर सके।


22

यदि आप 32-बिट प्लेटफ़ॉर्म पर x86-64 निष्पादन योग्य चलाने का प्रयास करते हैं तो यह भी हो सकता है।

एक विशिष्ट उदाहरण में, मैंने विजुअल स्टूडियो कोड डाउनलोड किया और इसे अपने उबंटू इंस्टॉलेशन पर चलाने की कोशिश की, लेकिन मुझे यह महसूस नहीं हुआ कि मैंने इस वीएम में 32-बिट उबंटू स्थापित किया है। मुझे यह त्रुटि मिली, लेकिन 32-बिट संस्करण को डाउनलोड करने के बाद, यह समस्या के बिना चला।


8

यदि आप Binfmt-supportBinfmt- समर्थन स्थापित करें , qemuQemu स्थापित करें , और qemu-user-staticQemu-user-static को स्थापित करें पैकेजों को स्थापित करते हैं , तो अक्सर एक amd64 सिस्टम पर ARM निष्पादन योग्य छवि को चलाना संभव है:

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

qemuजब आप निष्पादन योग्य चलाएंगे तब syscall एमुलेशन करेंगे। यह अधिकांश ARM बायनेरिज़ के लिए काम करता है लेकिन कुछ ऐसे हैं जो शायद सही तरीके से नहीं चल सकते हैं।


sudo apt-get install बिनफमत-समर्थन qemu qemu-user-static
मोमिन अल अज़ीज़

7

निम्न में से सभी सत्य होने पर ऐसी त्रुटि हो सकती है:

  • निष्पादन योग्य फ़ाइल नहीं बल्कि एक लिंक है
  • आप इसे VM के अंदर चलाते हैं
  • फ़ाइल साझा फ़ोल्डर में स्थित है
  • आपका होस्ट विंडोज है।

अगर आपको वह फ़ाइल मिल गई है, तो आर्काइव में कहें - इसे VM के अंदर अनपैक करने की कोशिश करें, वर्चुअल ड्राइव के अंदर कुछ डायरेक्टरी में, न कि आपके होस्ट मशीन हार्ड ड्राइव पर मैप किए गए फ़ोल्डर के लिए, उदाहरण के लिए /myNewDir/


यह काफी मददगार है। मेरे लिए, मैंने उस निष्पादन योग्य फ़ाइल के लिए एक शॉर्टकट (लिंक) बनाया, फिर शॉर्टकट को निष्पादित करके मुझे त्रुटि दी।
ड्यूक ट्रैन

2

आपको एक उपयुक्त सीपीयू आर्किटेक्चर (उदाहरण के लिए x86) का उपयोग करके अपनी फ़ाइल को संकलित करना होगा और अपने लिनक्स मशीन पर .exe फ़ाइल को कॉपी करना होगा। फिर आप अपने लिनक्स मशीन पर मोनो स्थापित कर सकते हैं और निम्नलिखित आदेश जारी कर सकते हैं:

mono myprogram.exe

2

यदि javaसिस्टम पर एक से अधिक स्थापित है, तो यह हो सकता है और डिफ़ॉल्ट के रूप में सेट नहीं किया गया है। Ubuntu14.04 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 कार्यान्वयन का उपयोग करता है जो कि libl नहीं है, जैसे कि musl। इन दिनों इस विशिष्ट समस्या का सबसे अधिक सामना करना पड़ता है जब अल्पाइन पर आधारित छवि के साथ डॉकटर कंटेनर में बाइनरी के साथ बाइनरी को चलाने की कोशिश की जाती है। ऐसा कुछ भी नहीं है जो बाइनरी के लिए दोनों वातावरणों का समर्थन करने के लिए किया जा सकता है, क्योंकि libc कार्यान्वयन को हमेशा सांख्यिकीय रूप से जोड़ा जाना चाहिए, अर्थात कारणों के लिए सीधे बाइनरी में बनाया गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.