잘못된 스키마로 인한 "해당 파일 또는 디렉터리 없음" 오류

잘못된 스키마로 인한 "해당 파일 또는 디렉터리 없음" 오류

나는 달리려고 노력하고있다.크로스 컴파일러내 64비트 우분투에서. 다음 오류가 발생합니다.

$ ./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

답변1

오류는 바이너리에 대한 로더가 누락되었기 때문에 발생합니다 /lib/ld-linux.so.2(그림 참조 file). 설치가 완료되면 실행하여 ldd arm-none-eabi-gcc추가로 필요한 것이 무엇인지 확인할 수 있습니다.

실행 파일이 커널이 이해하는 유효한 형식이므로 "Exec Format Error"가 발생하지 않지만 커널이 실행하려고 하면 필요한 파일(로더)을 찾을 수 없으므로 "No such file"이 발생합니다. 또는 디렉토리".

발견한 대로 64비트 시스템에서 작동하도록 하는 빠른 솔루션은 다음을 실행하는 것입니다.

sudo apt-get install lib32z1 lib32ncurses5

장기적으로 볼 때 더 나은 솔루션은 적절한 :i386다중 아키텍처 패키지를 사용하는 것입니다(이것이 패키지에서 소개하는 내용이어야 합니다 lib32).

관련 정보