Script do Linker no arquivo .so? (libc.so) Isso é certo?

5

No momento, estou tentando fazer o python rodar no meu NAS, que é um Zyxel NSA325.

Consegui obter o Python 2.7 e o pip em execução e consegui instalar com êxito o módulo watchdog com o pip. Eu segui estas instruções para obter python e pip em execução btw.

Quando executo um script python que usa o módulo watchdog, recebo um erro de barreira, difícil.

/usr/local/zy-pkgs/ffproot/ffp/bin/python2.7: '/ffp/lib/libc.so' is not an ELF file

Eu pesquisei como o cabeçalho de um arquivo ELF deve ser e aparentemente ele começa com 7f 45 4c 46 , que traduz para .ELF . Então eu fiz um cat /ffp/lib/libc.so rápido e o resultado foi:

/* GNU ld script
 * Use the shared library, but some functions are only in
 * the static library, so try that secondarily. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
         "elf32-littlearm")
GROUP ( libc.so.0 uclibc_nonshared.a AS_NEEDED ( ld-uClibc.so.0 ) )

É evidente que este não é um arquivo ELF. Então, passei mais tempo pesquisando e acho que é um script de vinculação .

Mas agora estou sem ideias. Por que há um script de vinculador em um arquivo .so? Isso esta certo? Como posso consertar isso?

Informações do sistema:

# uname -a
Linux NSA325-v2 2.6.31.8 #2 Fri Jun 23 11:03:47 CST 2017 armv5tel GNU/Linux
    
por Forivin 12.11.2017 / 01:00

1 resposta

6

Quando você vê um arquivo chamado .so , não é necessariamente uma biblioteca compartilhada. Esses arquivos são usados ao vincular um programa em tempo de compilação, não em tempo de execução; eles são comumente links simbólicos para a biblioteca compartilhada real, mas pelo menos em sistemas que usam o GNU ld eles também podem ser scripts de vinculação, e isso é perfeitamente aceitável. Se você olhar em um sistema moderno baseado em glibc, descobrirá que libc.so também é um script de vinculador.

Isso não explica por que o Python (ou o módulo watchdog) está procurando por libc.so em vez de libc.so.0 ... Poderia ser uma configuração incorreta do interpretador Python, talvez, ou uma suposição inválida no watchdog módulo. Eu vou dar uma olhada no último mais tarde hoje; Se for o primeiro, é melhor você perguntar no fórum vinculado à sua pergunta.

    
por 12.11.2017 / 08:24