The exec format error is a class of errors in the Unix-based operating systems that occurs when a user tries to run a binary file on its system originally intended to run on a different architecture. For example, when the user tries to execute a binary file originally compiled for the ARM (Advanced RISC Machine) on the x86 platform, an ‘exec format error’ is encountered. It is not in this particular case of arm and x86, but it could happen in any permutation of mismatched system architecture. In this article, we will look at this error in some detail and discuss some points that would help resolve this error.
What is Exec Format Error?
Different types of computer systems have different kinds of underlying architectures. Here, the term architecture means the circuitry and design of the CPU on how it handles and processes instructions and other computational tasks. System software and applications are compiled differently for a different architecture. Even the operating systems are designed specifically with a particular architecture in mind. There are two mainstream system architectures, The x86_64 and ARM. The x86_64 is mainly used in desktop computers and workstations, and ARM is used in mobile devices such as phones or tablets.
The x86_64 architecture can also be subdivided into 32bit and 64bits types. It represents the CPU’s memory handling capacity. Programs designed for ARM architecture can’t work on x86_64 systems and vice versa. But, the applications built for a 32bit machine can run on a 64bit. All combinations such as CPU architecture, Operating System build, and application design must come in to make everything work properly. And, If anything mismatches, an exec format error can show up.
Exec Format Error Linux
If you are trying to run incompatible programs or scripts in the Linux environment that doesn’t support the intended architecture, you are more likely to receive an exec format error. Linux itself comes in various forms and flavors in different distros. It is available on both x86_64 and ARM architecture. The most common cause of users receiving exec format errors is when 64bit programs are made to run on 32bit systems. If you are facing this error for a particular program due to an architectural issue, here are a few things that you could do.
- Open the terminal emulator, enter the command uname -m, the m stands for machine. This command would output your system architecture. x86 -> 32 bit x86, x86_64 -> 64bit, arm64 -> ARM.
- After knowing the correct architecture of your system, try to find the your program for that type of compatibility. The 32bit versions of the 64bit programs are ususally available on the internet.
- If you are on a ARM system, then try to download the program through your default package manager as they usually have arm version of most of the programs availbale to install through official repositories.
Exec format error macOS
macOS also throws an exec format error when you execute a program or script intended for a different architecture. This is usually the case with older binary programs that do not work well on modern operating systems. There are ways to execute older OS programs using the zsh shell, but you will have to build the executable yourself.
Download the program’s source code (if available ) you wish to run. Compile the program for your system using macOS’s make compiler. You would have to download make first, part of apple developer tools. It can be downloaded from http://developer.apple.com/.
Exec format error java
Java is a multipurpose, multiplatform object-oriented programming language that is a part of the whole JDK (java development kit). If you are trying to compile a java file on your system but receiving an exec format error instead, then chances are you have installed an incompatible version of the Java JDK on your system. Follow the given step to install the compatible version of JDK on your Linux machine as per the system architecture.
- First check your system architecture using the uname -m command.
- Now Open your Web browser.
- Head to https://www.oracle.com/java/technologies/downloads/#jdk17-linux.
- Now download the compatible version from the download options available.
You could also install the compatible version of JDK on your Linux installation using the default package manager of your distribution. Use the dpkg package manager on Debian-based and Pacman package manager on Arch-based Linux to install the correct implementation of java on your system.
Exec format error python
Python throws an exception in the form of exec format error. The python subprocess library provides the ability to run shell commands through the python interpreter. If any incompatible command or program is encountered during the python script, the python interpreter throws an OS exception. If you are running bash shell scripts through the subprocess library, keep the following points in mind to avoid exec format errors in python.
- Add !/bin/sh in the top first line of your shell script file.
- Use os library’s path method to open your .sh file, instead of opening it directly.
- Make sure the script file has executable permission.
Exec format error docker
Docker is a software platform that provides operating system-level isolation environments called containers. The containers provide different separate development environments for specific projects or purposes. Users are reported to have been facing exec format errors while running the docker test command on their environment. This happens due to a missing statement in the script file. Run the following command to run the docker test without format error.
docker run -entrypoint="/bin/bash" -i test
Exec format error raspberry pi
Raspberry pi is a small form-factor mini computer. It is a small computer that runs on low voltage power and has an ARM processor installed on it. The exec format error is frequently encountered in the raspberry pi as people often try to execute x86_64 on raspberry pi’s arm processor.
To avoid this error on the raspberry pi you have two potential options. You could either download the pi-compatible arm binary executables from their official repositories or download the program’s source code and compile it yourself for your intended system architecture. Luckily, Rasberry pi comes with its package manager apt (advance packaging tool) that can be used to install arm binaries on your raspberry pi.
How to execute arm binary files on Linux
Arm binary files are not directly executable on x86_64 Linux. The file command is used in Linux to check the file type in Linux. You can check the type and architecture of your file using it. If you want to run the arm files natively on Linux, you could download a package such as qemu, which could run the native arm files on the x86_64 machine. Follow the given steps to download and install the qemu to execute arm binaries on Arch.
- Open the terminal. (ctrl + alt + t )
- type sudo pacman -S qemu.
- Enter the root password.
- Enter Y when prompted and let the download finish.
- After installation use the syntex qemu <filename> to execute the binary.
FAQs on Exec Format Error
What is the full form of RISC?
RISC is short for Reduced Instruction Set Cycle.
Why are arm processors used on mobile devices?
Because they are more power-efficient than their x86_64 counterparts.
What is the difference between OpenJDK and OracleJDK?
The OracleJDK is completely developed by the Oracle Corporation, and the OpenJDK is a community-driven and open-source version in which everyone contributes.
Different computer architectures have different executables binary files, and one type is not compatible with another. An exec format error occurs if the user tries to execute another file type in a different environment. In this article, we discussed why the error occurs. We gave instructions to install the compatible JDK to eradicate java-specific exec format errors and provided instructions on how to execute arm binaries on x86_64 Linux.