Linux
“沒有這樣的文件或目錄”作為錯誤架構的錯誤
我正在嘗試在我的 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
包引入的)。