我目前正在尝试让一些硬件在嵌入式设备上工作。驱动程序的一部分是可执行文件,必须启动它才能使硬件正常工作。但是当我尝试执行它时我得到
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 From Scratch 上的此消息网站。在他的例子中,升级 glibc 给他的几个(但不是全部)命令带来了这个错误。
您需要安装与二进制文件匹配的正确 C 运行时库,或者获取与您的 C 运行时库匹配的二进制文件。
答案2
这可能是由于使用共享库(特别是 ld.so 又名动态加载器)时 libc 中的任何不匹配造成的,在 glibc 盒子上使用共享 uclibc 时非常常见,反之亦然。我建议使用通用静态工具链,直到您获得可用的本机共享工具链。 http://landley.net/原住民有一个针对多种预构建架构的引导工具链。