bibliotecas de vinculação / carregador dinâmicas - faltando ld.so

1

O manual descreve as bibliotecas do vinculador dinâmico / carregador:

The program ld.so handles a.out binaries, a format used long ago; ld-linux.so* handles ELF (/lib/ld-linux.so.1 for libc5, /lib/ld-linux.so.2 for glibc2), which everybody has been using for years now.

Eu uso o Ubuntu 15.04 e não tenho ld.so . Meu sistema contém um link simbólico para ld-2.21.so:

/lib/ld-linux.so.2 -> /lib32/ld-linux.so.2
/lib32/ld-linux.so.2 -> ld-2.21.so
/lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.21.so

Isso significa que o sistema não pode manipular binários a.out (porque não está equipado com ld.so)? Além disso, o ld-linux.so.2 é um link simbólico, não um lib, como descrito no manual. Como explicar isso?

    
por Irbis 21.09.2015 / 17:21

1 resposta

2

Seu sistema não tem /lib/ld.so , então ele não está equipado para executáveis a.out vinculados dinamicamente. Ele pode ser equipado para executáveis a.out vinculados estaticamente, se o seu kernel incluir suporte para eles; O Ubuntu não faz isso (isso requer a opção de configuração do kernel CONFIG_BINFMT_AOUT ). O formato a.out foi obsoleto no Linux por cerca de 20 anos e obsoleto por cerca de 15, então a maioria dos sistemas hoje parou de apoiá-lo.

/lib/ld-linux.so.1 e /lib/ld-linux.so.2 são duas versões diferentes do carregador dinâmico ELF do GNU / Linux, cada uma com sua própria ABI . A versão 1, correspondente à libc5, ficou obsoleta por apenas alguns anos a menos do que a.out e atualmente não é suportada na maioria dos sistemas. A versão 2, correspondente ao GNU libc6, é atual.

Cada arquitetura tem sua própria convenção de nomenclatura e número de versão para o carregador dinâmico (diferentes arquiteturas de processadores têm ABIs diferentes). /lib/ld-linux.so.2 é o nome x86_32. Em x86_64, a localização normal é /lib64/ld-linux-x86-64.so.2 . No armel, o local é /lib/ld-linux.so.3 , em armhf /lib/ld-linux-armhf.so.3 e assim por diante.

/lib/ld-linux.so.2 é uma biblioteca (ou, mais precisamente, um objeto compartilhado dinamicamente vinculado - o carregador dinâmico geralmente não é chamado de biblioteca). O fato de ser um link simbólico para um arquivo regular em vez de um arquivo normal não muda isso: o que faz dele uma biblioteca é seu conteúdo.

    
por 22.09.2015 / 02:56