GNU/Linux >> Tutoriales Linux >  >> Linux

¿"No existe tal archivo o directorio" se encuentra en los archivos binarios instalados de Optware?

He estado usando Optware para instalar paquetes en mi NAS basado en ARM durante un tiempo, lo habitual como Transmission, Samba y otros. Sin embargo, había tenido problemas con Transmission colgando poco después de comenzar. Busqué una solución durante un tiempo y finalmente descubrí que la alimentación de Optware que estaba usando no era la que había sido configurada para mi caja NAS. Cambié las fuentes y reinstalé todos los paquetes, pero ahora recibo el siguiente error cuando intento ejecutar algo que se reinstaló:

$ smbd
-bash: /opt/sbin/smbd: No such file or directory
$ transmission-daemon
-bash: /opt/bin/transmission-daemon: No such file or directory
$ unrar
-bash: /opt/bin/unrar: No such file or directory

Revisé /opt/bin y /opt/sbin y los ejecutables definitivamente están ahí, entonces, ¿cuál es el problema real?

$ ldd /opt/bin/transmission-daemon
/usr/bin/ldd: line 116: /opt/bin/transmission-daemon: No such file or directory

$ file /opt/bin/transmission-daemon
/opt/bin/transmission-daemon: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), stripped

$ readelf - l /opt/sbin/smbd
readelf: error while loading shared libraries: libc.so.0: cannot open shared object file: No such file or directory

$ cat /proc/$$/maps
…
40084000-4019e000 r-xp 00000000 09:01 112594 /lib/libc-2.7.so
…

No estoy seguro de qué significa eso, pero prueba que el archivo es allí, ¿verdad? ¿O tiene algo que ver con las librerías compartidas?

Respuesta aceptada:

Cuando falla al ejecutar un archivo que depende de un "cargador", el error que obtiene puede referirse al cargador en lugar del archivo que está ejecutando.

  • El cargador de un ejecutable nativo enlazado dinámicamente es la parte del sistema responsable de cargar bibliotecas dinámicas. Es algo como /lib/ld.so o /lib/ld-linux.so.2 , y debe ser un archivo ejecutable.
  • El cargador de un script es el programa mencionado en la línea shebang, p. /bin/sh para un script que comienza con #!/bin/sh .

El mensaje de error es bastante engañoso al no indicar que el cargador es el problema. Desafortunadamente, solucionar esto sería difícil porque la interfaz del kernel solo tiene espacio para informar un código de error numérico, no para indicar también que el error en realidad se refiere a un archivo diferente. Algunos shells hacen el trabajo por sí mismos para los scripts (leyendo el #! línea en el script y volver a trabajar en la condición de error), pero ninguno que haya visto intenta hacer lo mismo con los binarios nativos.

ldd tampoco funciona en los binarios porque funciona configurando algunas variables de entorno especiales y luego ejecutando el programa, dejando que el cargador haga el trabajo. strace tampoco proporcionaría ninguna información significativa, ya que no informaría más de lo que informa el kernel y, como hemos visto, el kernel no puede informar todo lo que sabe.

Aquí sus ejecutables reinstalados (smbd , transmission-daemon , etc.) están solicitando un cargador que no está presente en su sistema. Por lo tanto, su nuevo feed tampoco es adecuado para su sistema.

Relacionado:Linux:¿ajustar la velocidad del ventilador a través de Fancontrol de acuerdo con la temperatura del disco duro (Hddtemp)?

Esta situación a menudo surge cuando intenta ejecutar un binario para el sistema correcto (o familia de sistemas) y la arquitectura superior, pero la subarquitectura incorrecta. Aquí tiene binarios ELF en un sistema que espera binarios ELF, por lo que el kernel los carga correctamente. Son binarios ARM que se ejecutan en un procesador ARM, por lo que las instrucciones tienen sentido y llevan el programa al punto en el que puede buscar su cargador. Pero es el cargador equivocado.

Ahora estoy entrando en conjeturas, pero sospecho que su nuevo feed es para el ABI ARM incorrecto. La ABI es el lenguaje común para realizar llamadas entre procedimientos y, en particular, para llamar a funciones de biblioteca. En algunas arquitecturas de procesador, hay varias opciones posibles de ABI, y debe elegir una y usarla de manera consistente. Existen dos ABI ARM con distribuciones de Linux:el tradicional arm-elf ABI, y el EABI más nuevo (arm-eabi ). No puede mezclar ABI en el mismo sistema, por lo que necesita encontrar una fuente de paquetes para su ABI (o reinstalar su sistema para una ABI diferente).


Linux
  1. No se puede ejecutar No existe tal archivo o directorio [Fijar]

  2. Mkdir:No se puede crear un directorio:¿No existe tal archivo o directorio?

  3. ¿No se puede eliminar el archivo en la partición Ntfs, evento como raíz?

  4. Ver archivo tabular como CSV desde la línea de comando

  5. No existe tal error de archivo o directorio al ejecutar un binario

¿Intento usar el comando Mover (mv), pero obtengo "ningún archivo o directorio"?

No se puede “rmar” un archivo llamado “() – .” ¿Debido a que “no existe tal archivo o directorio”?

Shopt:No encontrado [No existe tal archivo o directorio]

Bash:¿No existe tal archivo o directorio?

Error fatal:cuda.h:No existe tal archivo o directorio

conda source deactivate :bash:deactivate:No existe tal archivo o directorio