동일한 프로그램의 사전 구축된 바이너리 여러 개를 다운로드했습니다(nodejs-linux,-x86,-x86_64). 다른 쉘에서도 비슷한 오류가 발생합니다 no such file or directory: node
. 맞습니다 $PATH
. 바이너리가 존재하며 실행 가능합니다.
musl
제가 Linux 기반 배포판을 사용하고 있고 바이너리가 를 사용하고 있기 때문입니까 glibc
? 이 경우 프로그램이 0이 아닌 값으로 충돌하거나 종료되는 것 같습니다.
참고: @DepressionDaniel과 @xhienne는 모두 아래에 정답을 제시했습니다.
답변1
귀하의 오류는 공유 객체가 없어서 발생하는 것이 아니라 공유 객체가 없기 때문에 발생합니다.동적 로더애플리케이션에서 사용됩니다.
동적 로더를 찾을 수 없으면 셸로 exec()
반환되며 이는 수신되는 오류 메시지로 변환됩니다.ENOENT
동적 로더가 발견되면 exec()
성공하고 동적 로더는 누락된 공유 객체에 대한 정보 메시지를 인쇄할 수 있습니다(이 경우).
이는 ls
다양한 방법으로 바이너리를 조정하여 쉽게 시도할 수 있습니다.
cd /tmp
cp $(which ls) .
sed -e 's/libc.so.6/BAD!.so.6/' <ls >ls2
sed -e 's/ld-linux/ha-hahah/' <ls >ls3
strace ./ls2
strace ./ls3
따라서 귀하 musl
의 Linux 기반은 매우 급진적이어서 glibc
다른 사항을 변경할 뿐만 아니라 동적 로더를 틀에 얽매이지 않는 경로에 놓거나 틀에 얽매이지 않는 이름을 부여하기도 합니다.
답변2
라이브러리가 실행 파일에 필요한 동적 라이브러리와 일치하지 않으면 시작되지도 않습니다. 이 실행 파일이 어떤 동적 라이브러리에 연결되어 있는지 확인하려면 다음을 수행하세요.
ldd /path/to/executable
보시면 => not found
뭔가 빠졌다는 걸 아실 겁니다.