Linux

“沒有這樣的文件或目錄”作為錯誤架構的錯誤

  • December 14, 2016

我正在嘗試在我的 64 位 Ubuntu 上執行交叉編譯器。並導致以下錯誤:

$ ./arm-none-eabi-gcc
bash: ./arm-none-eabi-gcc: No such file or directory

該文件在這裡並包含一些數據:

$ 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���|�

ldd顯示不需要依賴項:

$ ldd arm-none-eabi-gcc
not a dynamic executable

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 +++

最後我發現它適用於 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

問題

如果二進製文件的架構是錯誤的,為什麼錯誤會如此含糊?

我希望類似於以下我嘗試執行 .JPG 的情況,其中二進制執行沒有意義:

$ ./DSC_0140.JPG 
bash: ./DSC_0140.JPG: cannot execute binary file: Exec format error

錯誤來自您缺少二進製文件的載入程序/lib/ld-linux.so.2(如 所示file)。安裝完成後,您將能夠執行ldd arm-none-eabi-gcc以查看還需要什麼。

執行檔是核心理解的有效格式,因此您不會收到“Exec format error”,但是當核心嘗試執行它時,它找不到所需的文件——載入程序——,因此“沒有相應的文件和目錄”。

如您所見,讓它在 64 位機器上執行的快速解決方案是執行:

sudo apt-get install lib32z1 lib32ncurses5

儘管從長遠來看,更好的解決方案是使用適當的:i386多體系結構包(這應該是由lib32包引入的)。

引用自:https://unix.stackexchange.com/questions/330356