그러한 파일이나 디렉토리가 없습니까? 그러나 파일이 존재합니다!


186

게임 (Shank)을 다운로드했지만 bin 파일이 실행되지 않습니다. 실행 파일을 시작하려고 할 때 표시되는 오류는 다음과 같습니다.

bash: ./shank-linux-120720110-1-bin: No such file or directory

2
아마 "chmod u + x ./shank*bin"가 처음일까요?
agent86

또한 '-bin'이 아닌 '.bin'이 아니어야합니다. 아마도 오타
일뿐입니다.

당신의 답변에 감사드립니다. Agent86에게 말한 명령을 수행했지만 결과는 같습니다. .deb 파일도 다운로드했지만 문제가 있습니다. 이 게임에 어떤 문제가 있는지 모르겠습니다.
프란체스코

64 비트 설치를 실행 중인지 확인하십시오 (이 문제의 가장 일반적인 경우).
Gilles

예, 랩톱에서 64 비트 아키텍처를 사용하고 있음을 확인합니다.
Francesco

답변:


235

32 비트 지원이 설치되지 않은 64 비트 시스템에서 32 비트 바이너리를 실행하려고합니다.

"No such file or directory"라는 메시지가 표시되는 세 가지 경우가 있습니다.

  • 파일이 존재하지 않습니다. 파일이 존재하는지 확인했다고 가정합니다 (아마 쉘이 ​​완료했기 때문에).
  • 그 이름으로 된 파일이 있지만 매달려있는 심볼릭 링크입니다.
  • 파일이 존재하고 파일을 읽을 수도 있습니다 (예를 들어, 명령 file shank-linux-120720110-1-bin은“ELF 32 비트 LSB 실행 파일…”과 같은 것을 표시합니다). 그러나 파일을 실행하려고하면 파일이 존재하지 않는다는 메시지가 나타납니다.

이 마지막 경우의 오류 메시지는 혼란 스럽습니다. 당신이 말하는 것은 프로그램을 실행하는 데 필요한 런타임 환경의 핵심 구성 요소가 없다는 것입니다. 불행히도, 오류가보고되는 채널은 오류 코드를위한 공간 만 가지고 있으며 실제로는 비난을받는 런타임 환경이라는 추가 정보가 없습니다. 이 설명의 기술 버전을 원하면 64 비트 시스템에서 32 비트 바이너리를 실행할 때 "찾을 수 없음"메시지 얻기를 참조하십시오 .

file명령이 바이너리는 단지 무엇을 말할 것이다. 몇 가지 예외를 제외하고는 Ubuntu 릴리스의 프로세서 아키텍처에 대해서만 바이너리를 실행할 수 있습니다. 주요 예외는 64 비트 (amd64, 일명 x86_64) 시스템에서 32 비트 (x86, 일명 IA32) 바이너리를 실행할 수 있다는 것입니다.

우분투에서는 최대 11.04까지 64 비트 설치에서 32 비트 바이너리를 실행 하려면 ia32-libs패키지설치해야 합니다ia32-libs 설치 . 추가 라이브러리를 설치해야 할 수도 있습니다 (해당하는 경우 명시적인 오류 메시지가 표시됨).

11.10 (oneiric)이 다중 아치 지원을 도입 한 이후에도 여전히 설치할 수 ia32-libs는 있지만 더 세밀한 접근 방식을 선택할 수 있습니다 (필요한 다른 라이브러리).libc6-i386 libc6-i386 설치


좋은 답변 주셔서 감사합니다, 질. 이 문제가 발생하지 않았지만 (아직!) 나중에 참조 할 수 있도록 답변을 제출했습니다.
Jim C

철저한 답변에 감사드립니다! 다운로드 한 파일 저장소는이 형식 (bin)에서 사용할 수있는 유일한 파일 저장소입니다. 모든 아키텍처에 적합하다고 생각합니다. 또한 내 아키텍처 (64 비트) 용 .deb 파일을 다운로드했지만 오류가 다릅니다. 이 시점에서 게임이 일부 버그의 영향을 받거나이 게임을 설치할 수 없다고 생각합니다. 이제 libc6-i386을 다운로드하려고 시도하고 여전히 설치하려고합니다. 중요한 변경 사항이 있으면 다시 작성하겠습니다. 시간 내 주셔서 감사합니다.
Francesco

2
@Francesco 솔루션을 게시하십시오! 우분투에서 k 크를 실행하려는 다른 사람들을 도울 수 있습니다. 자신의 질문에 대답해도 괜찮습니다 .
Gilles

1
ldd라이브러리가 없는지 확인할 수 있습니다 . 다른 사람들 ldd kgio_ext.so과 비슷한 말을 할 수도 libruby.so.2.3 => not found있습니다
EnabrenTane

1
bash: ...some...path...: No such file or directory실행 파일을 이동 한 후 나타날 수있는 또 다른 시나리오가 있습니다. Bash는 $ PATH에있는 실행 파일의 경로를 캐시하는 것 같습니다. hash -r그것을 지우려면 실행 하십시오. 참조 : unix.stackexchange.com/a/5610/11352
akavel

53

64 비트 Ubuntu Multiarch 시스템

file file-name쇼 의 출력이

file-name: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

64 비트 멀티 아치 우분투 시스템에서 32 비트 실행 파일을 실행하려면 추가해야 i386아키텍처를하고도 당신은 설치해야 libc6:i386, libncurses5:i386, libstdc++6:i386이 세 가지 라이브러리 패키지를.

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name

마지막 명령에 sudo를 사용할 것입니다 : sudo가 위험 할 수 있으므로 32 비트 바이너리 (따라서 당신이나 Ubuntu가 컴파일하지 않은)를 시작하십시오. (물론, 루트가 아니더라도)
alci

마지막에있을 수는 있지만 작동합니다.
Avinash Raj

1
CentOS 또는 RedHat을 사용하는 경우이 답변이 적용되지 않습니다. 이 때문에 몇 시간 동안 버려졌습니다.
omikes

1
Kali 2 64 비트에서는 설치 libselinux1:i386
만하면됩니다

4

32 비트 용 deb를 설치하면 ia32-libs 및 libc6 외에도 일부 라이브러리가 누락되었음을 알았습니다. 먼저 다음 명령을 제공하여이 문제를 해결했습니다.

sudo apt-get install -f          

그런 다음 다른 오류가 발생했습니다.

Message: SDL_GL_LoadLibrary 
Error: Failed loading libGL.so.1

분명히이 라이브러리는 제대로 설치되었습니다. 세부 사항에 들어 가지 않고 손으로 라이브러리를 연결해야했습니다. Synaptic을 통해 다음 패키지를 설치하면 더 쉬운 솔루션이 될 수 있음을 깨달았습니다.

libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.

그 후 다음 문제는 재생하는 동안 검은 화면이었습니다 ./Shank/bin의 실행 파일을 다음과 같이 대체하여 해결했습니다. http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .

누군가에게 도움이되기를 바랍니다. 도움이 필요하거나 자세한 내용이 필요하면 언제든지 저에게 연락하십시오.


3

다음은 문제의 본질과 Ubuntu 16.04에서 문제를 해결하는 방법에 대해 조금 더 보여주는 대화 내용입니다. 비록 것을 알 file보고서는 "동적으로 링크 된", ldd"동적 실행하지"보고합니다.

$ ./myprogram
bash: myprogram: No such file or directory

$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped

$ ldd myprogram
    not a dynamic executable

libc6 : i386을 설치하면 개선이 시작됩니다 ...

$ sudo apt-get install libc6:i386 # the initial fix
...

$ ldd myprogram
    linux-gate.so.1 =>  (0xf77fd000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
    /lib/ld-linux.so.2 (0x56578000)

$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

작업을 완료하려면 한 번에 하나씩 추가 라이브러리를 식별하고 설치해야합니다.

$ sudo apt-get install libstdc++6:i386 ## may require various additional libs

$ ./myprogram
... works correctly ...

설치할 올바른 라이브러리를 체계적으로 식별하는 방법이 있는지 모르겠습니다. 오류 메시지를 패키지 이름에 매핑하는 추측이 약간 있습니다 (탭 완성이 도움이 됨).


ldd(잘못된) "동적 실행 파일이 아님"을보고합니다.
nobar

3

@Gilles 답변을 확장하려면 적어도 세 가지 시나리오가 있어이 오류가 발생합니다.

  1. 파일이 존재하지 않습니다.
  2. 파일이 존재하지만 매달려있는 심볼릭 링크입니다.
  3. 파일이 존재하여 (예 : file명령 작동) 수수께끼 오류 메시지가 나타납니다. 로더에 문제가 있음을 의미 할 수 있습니다.

로더 문제의 범주 :

  1. 실행 파일 로더가 존재하지 않습니다. file 명령을 사용하여이를 점검하고 로더가 존재하는지 확인할 수 있습니다. 예 :

    file lmgrd
    lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
    

    통지 interpreter /lib64/ld-lsb-x86-64.so.3; 이 파일이 없으면 설치해야합니다. 16.04 의이 특정 로더의 경우 대답은 sudo apt-get install lsb입니다.

  2. 스크립트 로더 관련 문제 ( 이 답변 참조 )

  3. 공유 라이브러리가 없음- ldd <file-name>"찾을 수 없음"라이브러리를 확인 하는 데 사용 하십시오. 자세한 내용은 이 답변 을 참조하십시오.

존재하지 않는 로더는 32/64 비트 불일치 또는 다른 이유로 인해 발생할 수 있습니다. 내가 모르는 다른 종류의 로더 오류가있을 수 있습니다.


1
제 경우 file lmutil에는 통역사를 보여주지 않았지만 ldd설치 lsb하여 문제 를 해결했습니다.
davidA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.