Estoy tratando de compilar el firmware para mi Linksys WRVS4400N.
ls
muestra que existe pero cuando intenta ejecutarlo bash dice que no existe. También puedo cat
hacerlo, y es un ejecutable, no un script de shell.
Estoy tratando de compilar el firmware para mi Linksys WRVS4400N.
ls
muestra que existe pero cuando intenta ejecutarlo bash dice que no existe. También puedo cat
hacerlo, y es un ejecutable, no un script de shell.
Respuestas:
Usted mencionó que la salida de file mkdep
es 32-bit elf
. Estás ejecutando una máquina virtual de 64 bits.
Ejemplo:
$ uname -m
x86_64
$ ls -l ./example
-rwxr-xr-x 1 root root 92312 2011-08-18 16:52 ./example
$ file ./example
example: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ ./example
-bash: ./example: No such file or directory
Simplemente haga una nueva máquina virtual de 32 bits y compílela allí.
¿Está configurado para ser ejecutable? Si no, entonces chmod +x filename
. ¿Está en tu RUTA? Si no, entonces llámalo como ./filename
algo más que simplemente filename
.
Cuando intenta ejecutar un archivo y bash dice que no existe, a veces significa que bash cree que el archivo es un script y que el intérprete especificado en la primera línea (#!) No existe.
Si se nombra los archivos mkdep
, publicaría la salida de
./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt
El comando strace proporciona información sobre las llamadas realizadas al sistema, por ejemplo, strace ls 2>ls.t
pone lo siguiente en ls.t
execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0 brk (0) = 0x8061000 acceso ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (No existe tal archivo o directorio) mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000 acceso ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (No existe tal archivo o directorio) abierto ("/ etc / ld.so.cache", O_RDONLY) = 3 fstat64 (3, {st_mode = S_IFREG | 0644, st_size = 32311, ...}) = 0 mmap2 (NULL, 32311, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f7a000 cerrar (3) = 0 acceso ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (No existe tal archivo o directorio) abierto ("/ lib / librt.so.1", O_RDONLY) = 3 leer (3, "\ 177ELF \ 1 \ 1 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 3 \ 0 \ 3 \ 0 \ 1 \ 0 \ 0 \ 0 \ 240 \ 30 \ 0 \ 0004 \ 0 \ 0 \ 0 "..., 512) = 512 fstat64 (3, {st_mode = S_IFREG | 0644, st_size = 30624, ...}) = 0
strace ./mkdep 2>mkdep.strace.txt
esto debería darle una idea de lo que está sucediendo. Es posible que deba instalar strace desde los repositorios.
¿Estás cambiando IFS en tu script? También encontré el mismo problema en uno de mis scripts y pensé lo mismo (el archivo de 32 bits se lee mediante un script de shell en una máquina de 64 bits). Pero ese no era el problema en mi caso. En cambio, estaba cambiando IFS a coma 'y' a una nueva línea que de alguna manera confundió al analizador y causó este error.
Acabo de eliminar cualquier cambio en IFS y ahora funciona bien.