bash: ./program: δεν μπορεί να εκτελέσει δυαδικό αρχείο: Σφάλμα μορφής εκτέλεσης

Προσπαθώ να τρέξω ένα πρόγραμμα, αλλά μου συμβαίνει ένα σφάλμα σαν αυτό:

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

Πώς μπορώ να διορθώσω αυτό το σφάλμα;

Χρησιμοποιώ Ubuntu 14.04.2 (amd64) με VMware. Δοκίμασα επίσης με Ubuntu i386, αλλά το αποτέλεσμα ήταν το ίδιο.

Προσπαθείτε να εκτελέσετε ένα εκτελέσιμο πρόγραμμα που έχει μεταγλωττιστεί για μια αρχιτεκτονική ARM σε μια αρχιτεκτονική x86-64, κάτι που είναι σαν να ζητάτε από τον επεξεργαστή σας που μιλάει μόνο αγγλικά να σας δώσει οδηγίες στα κινέζικα.

Εάν πρέπει να εκτελέσετε αυτό το εκτελέσιμο πρόγραμμα έχετε δύο επιλογές:

  1. Να αποκτήσετε μια έκδοση x86-64 του εκτελέσιμου αρχείου (με οποιοδήποτε μέσο- αν δεν μπορείτε να αποκτήσετε μια έκδοση x86-64 του εκτελέσιμου αρχείου, αλλά μπορείτε να αποκτήσετε τον πηγαίο του κώδικα, μπορείτε να προσπαθήσετε να το μεταγλωττίσετε εκ νέου στην εικονική μηχανή),

  2. Εγκαταστήστε το Ubuntu Server for ARM στη θέση του Ubuntu 14.04.2 (amd64). Αυτό απαιτεί είτε ένα φυσικό μηχάνημα που τρέχει σε αρχιτεκτονική ARM είτε ένα λογισμικό εικονικοποίησης που μπορεί να την εξομοιώσει.

Σχόλια (0)

Αυτό μπορεί επίσης να συμβεί αν προσπαθήσετε να εκτελέσετε ένα εκτελέσιμο πρόγραμμα x86-64 σε μια πλατφόρμα 32-bit.

Σε μια συγκεκριμένη περίπτωση, κατέβασα το Visual Studio Code και προσπάθησα να το τρέξω στην εγκατάστασή μου στο Ubuntu, αλλά δεν είχα συνειδητοποιήσει ότι είχα εγκαταστήσει το Ubuntu 32-bit σε αυτό το VM. Πήρα αυτό το σφάλμα, αλλά αφού κατέβασα την έκδοση 32-bit, έτρεξε χωρίς πρόβλημα.

Σχόλια (0)

Ένα τέτοιο σφάλμα μπορεί να προκύψει εάν ισχύουν όλα τα ακόλουθα:

  • Το εκτελέσιμο δεν είναι αρχείο αλλά σύνδεσμος.
  • Το εκτελείτε μέσα σε VM
  • Το αρχείο βρίσκεται σε κοινόχρηστο φάκελο
  • Ο κεντρικός σας υπολογιστής είναι Windows.

Αν έχετε αυτό το αρχείο, ας πούμε, σε αρχείο - προσπαθήστε να το αποσυμπιέσετε μέσα στο VM, σε κάποιο κατάλογο μέσα σε εικονικό δίσκο, όχι σε φάκελο που αντιστοιχίζεται στο σκληρό δίσκο του υπολογιστή σας, για παράδειγμα /myNewDir/

Σχόλια (1)