Προσπαθώ να τρέξω ένα πρόγραμμα, αλλά μου συμβαίνει ένα σφάλμα σαν αυτό:
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, κάτι που είναι σαν να ζητάτε από τον επεξεργαστή σας που μιλάει μόνο αγγλικά να σας δώσει οδηγίες στα κινέζικα.
Εάν πρέπει να εκτελέσετε αυτό το εκτελέσιμο πρόγραμμα έχετε δύο επιλογές:
Να αποκτήσετε μια έκδοση x86-64 του εκτελέσιμου αρχείου (με οποιοδήποτε μέσο- αν δεν μπορείτε να αποκτήσετε μια έκδοση x86-64 του εκτελέσιμου αρχείου, αλλά μπορείτε να αποκτήσετε τον πηγαίο του κώδικα, μπορείτε να προσπαθήσετε να το μεταγλωττίσετε εκ νέου στην εικονική μηχανή),
Εγκαταστήστε το Ubuntu Server for ARM στη θέση του Ubuntu 14.04.2 (amd64). Αυτό απαιτεί είτε ένα φυσικό μηχάνημα που τρέχει σε αρχιτεκτονική ARM είτε ένα λογισμικό εικονικοποίησης που μπορεί να την εξομοιώσει.
Αυτό μπορεί επίσης να συμβεί αν προσπαθήσετε να εκτελέσετε ένα εκτελέσιμο πρόγραμμα x86-64 σε μια πλατφόρμα 32-bit.
Σε μια συγκεκριμένη περίπτωση, κατέβασα το Visual Studio Code και προσπάθησα να το τρέξω στην εγκατάστασή μου στο Ubuntu, αλλά δεν είχα συνειδητοποιήσει ότι είχα εγκαταστήσει το Ubuntu 32-bit σε αυτό το VM. Πήρα αυτό το σφάλμα, αλλά αφού κατέβασα την έκδοση 32-bit, έτρεξε χωρίς πρόβλημα.
Ένα τέτοιο σφάλμα μπορεί να προκύψει εάν ισχύουν όλα τα ακόλουθα:
Αν έχετε αυτό το αρχείο, ας πούμε, σε αρχείο - προσπαθήστε να το αποσυμπιέσετε μέσα στο VM, σε κάποιο κατάλογο μέσα σε εικονικό δίσκο, όχι σε φάκελο που αντιστοιχίζεται στο σκληρό δίσκο του υπολογιστή σας, για παράδειγμα /myNewDir/