O que significa "estaticamente vinculado"?

0

No meu entendimento, so file é a biblioteca dinâmica. Podemos usar ldd para imprimir suas dependências.

Por exemplo, posso executar ldd -r /usr/lib/aarch64-linux-gnu/libstdc++.so.6 para obter a saída como abaixo:

    linux-vdso.so.1 =>  (0x0000ffff793f7000)
    libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffff79173000)
    libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff7902c000)
    /lib/ld-linux-aarch64.so.1 (0x0000aaaae0a5d000)
    libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000ffff7900b000)

No entanto, hoje, quando executo ldd -r /lib/ld-linux-aarch64.so.1 , obtenho isto:

statically linked

Por que recebo essa saída? O que isso significa?

    
por Yves 11.07.2018 / 13:35

1 resposta

0

O arquivo não está usando bibliotecas dinâmicas, mas tem as partes necessárias das bibliotecas dentro do executável.

Como resultado, ldd não pode dizer nada sobre o arquivo.

Isso significa que o executável não precisa de bibliotecas dinâmicas, mas isso também significa que ele não pode se beneficiar de correções de bugs nas bibliotecas e se uma interface do kernel for alterada, o executável estático não funcionará com o novo kernel alterado. / p>

Em seu caso especial, você está verificando o chamado run time linker que é usado para vincular as bibliotecas dinâmicas em tempo de execução ao binário principal, mmap() ing e criando os deslocamentos corretos para chamadas nas bibliotecas dinâmicas. Como esse vinculador de tempo de execução está fazendo o trabalho, ele não pode depender de outros objetos dinâmicos.

    
por 11.07.2018 / 13:38