Arquivo não encontrado para o arquivo que está lá [duplicado]

4

No momento, estou tentando obter algum hardware para trabalhar em um dispositivo incorporado. Uma parte do driver é um executável, que deve ser iniciado para que o hardware funcione. No entanto, quando tento executá-lo, obtenho

bash: no such file or directory

Eu verifiquei e o arquivo está definitivamente lá, executável etc. Eu olhei em volta e descobri que isso também poderia estar relacionado a um problema entre a arquitetura para a qual o arquivo foi compilado e o que estou usando. No entanto, não consigo encontrar nada de errado. Aqui estão alguns dos diagnósticos que executei:

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

A única dica que eu tenho é que file informa esse arquivo como um executável vinculado dinamicamente, enquanto ldd relata que ele não é executável dinamicamente.

Alguma idéia do que poderia estar errado com o arquivo e como corrigir isso?

    
por LiKao 19.07.2012 / 15:33

2 respostas

4

Embora a arquitetura seja a mesma, e essa mensagem geralmente indica que o binário é para uma arquitetura externa, o significado real dessa mensagem é que ela está vinculada a uma biblioteca de tempo de execução C incompatível.

Veja esta mensagem no site Linux From Scratch . No seu caso, atualizar o glibc deu a ele esse erro para vários comandos (mas não todos).

Você precisará instalar a biblioteca de tempo de execução C apropriada que corresponda ao binário ou obter um binário que corresponda à sua biblioteca de tempo de execução C.

    
por 19.07.2012 / 20:01
2

Isso pode vir de qualquer incompatibilidade na libc ao usar bibliotecas compartilhadas (especificamente o carregador dinâmico ld.so a.k.a) Muito comum quando se usa o uclibc compartilhado em uma caixa glibc ou vice-versa. Eu recomendaria usar um toolchain estático genérico até você obter um compartilhamento nativo compartilhado. O link tem uma cadeia de ferramentas de bootstrap para várias arquiteturas pré-construídas.

    
por 20.07.2012 / 00:23