현재 임베디드 장치에서 일부 하드웨어가 작동하도록 노력 중입니다. 드라이버 부분은 하드웨어가 제대로 작동하기 위해 시작해야 하는 실행 파일입니다. 하지만 실행하려고 하면
bash: no such file or directory
확인해 보니 파일이 확실히 존재하고 실행 가능합니다. 온라인에서 찾아보니 이것이 파일이 컴파일된 아키텍처와 내가 사용하는 아키텍처 사이의 문제와도 관련이 있을 수 있다는 것을 발견했습니다. 하지만 아무런 문제도 발견할 수 없습니다. 내가 실행한 몇 가지 진단은 다음과 같습니다.
root@desktop:~# /usr/local/eGTouchARMwithX/eGTouchD
bash: /usr/local/eGTouchARMwithX/eGTouchD: No such file or directory
root@desktop:~# ls -l /usr/local/eGTouchARMwithX/eGTouchD
-rwxr-xr-x 1 root root 198870 Jul 19 14:11 /usr/local/eGTouchARMwithX/eGTouchD
root@desktop:~# file /usr/local/eGTouchARMwithX/eGTouchD
/usr/local/eGTouchARMwithX/eGTouchD: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
root@desktop:~# uname -a
Linux desktop 3.2.0-1415-omap4 #20-Ubuntu SMP PREEMPT Mon Jun 18 19:03:59 UTC 2012 armv7l armv7l armv7l GNU/Linux
root@desktop:~# file /bin/bash
/bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, BuildID[sha1]=0x1266f80916e3e59eb001459610510f5d05630297, stripped
root@desktop:~# ldd /usr/local/eGTouchARMwithX/eGTouchD
not a dynamic executable
유일한 팁은 file
이 파일을 동적으로 연결된 실행 파일로 보고하고 ldd
동적 실행 파일이 아닌 것으로 보고하는 것입니다.
이 파일에 어떤 문제가 있을 수 있는지, 어떻게 해결하는지 알고 있나요?
답변1
아키텍처는 동일하고 이 메시지는 일반적으로 바이너리가 외부 아키텍처용임을 나타내지만 이 메시지가 실제로 의미하는 것은 호환되지 않는 C 런타임 라이브러리에 연결된다는 것입니다.
바라보다처음부터 Linux에 대한 이 메시지웹사이트. 그의 경우 glibc를 업그레이드하면 이 오류가 그의 명령 중 일부(전부는 아님)에 발생했습니다.
바이너리와 일치하는 올바른 C 런타임 라이브러리를 설치하거나 C 런타임 라이브러리와 일치하는 바이너리를 가져와야 합니다.
답변2
이는 공유 라이브러리(특히 동적 로더라고도 불리는 ld.so)를 사용할 때 libc의 불일치로 인해 발생할 수 있으며, glibc 상자에서 공유 uclibc를 사용할 때 매우 일반적이며 그 반대의 경우도 마찬가지입니다. 기본 공유 도구 체인을 사용할 수 있을 때까지 일반 정적 도구 체인을 사용하는 것이 좋습니다. http://landley.net/원주민사전 구축된 여러 아키텍처를 위한 부트스트랩 툴체인이 있습니다.