The*_*eer 1 linux executable 32bit binary exec
我正在尝试在我的 64 位 Ubuntu 上运行交叉编译器。并导致以下错误:
$ ./arm-none-eabi-gcc
bash: ./arm-none-eabi-gcc: No such file or directory
Run Code Online (Sandbox Code Playgroud)
该文件在这里并包含一些数据:
$ ls -la arm-none-eabi-gcc
-rwxr-xr-x 2 alan alan 776368 Sep 26 19:36 arm-none-eabi-gcc
$ head -n 1 arm-none-eabi-gcc
ELF?4?
4 (44?4? TT?T???|?
Run Code Online (Sandbox Code Playgroud)
ldd 显示不需要依赖项:
$ ldd arm-none-eabi-gcc
not a dynamic executable
Run Code Online (Sandbox Code Playgroud)
strace 也没有提供额外的信息:
$ strace ./arm-none-eabi-gcc
execve("./arm-none-eabi-gcc", ["./arm-none-eabi-gcc"], [/* 80 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
exit_group(1) = ?
+++ exited with 1 +++
Run Code Online (Sandbox Code Playgroud)
最后我发现它适用于 32 位系统:
$ file arm-none-eabi-gcc
arm-none-eabi-gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.8, stripped
Run Code Online (Sandbox Code Playgroud)
题
如果二进制的架构是错误的,为什么错误如此模糊?
我希望类似于以下我尝试执行 .JPG 的情况,其中二进制执行没有意义:
$ ./DSC_0140.JPG
bash: ./DSC_0140.JPG: cannot execute binary file: Exec format error
Run Code Online (Sandbox Code Playgroud)
该错误来自于您缺少二进制文件的加载程序/lib/ld-linux.so.2(如 所示file)。安装完成后,您将能够运行ldd arm-none-eabi-gcc以查看还需要什么。
可执行文件采用内核能够理解的有效格式,因此您不会收到“Exec 格式错误”,但是当内核尝试运行它时,它找不到所需的文件——加载程序——,因此“无此文件或目录”。
如您所见,在 64 位计算机上运行的快速解决方案是运行:
sudo apt-get install lib32z1 lib32ncurses5
Run Code Online (Sandbox Code Playgroud)
虽然从长远来看更好的解决方案是使用适当的:i386多架构包(这应该是被包引入的lib32)。
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |