Existe uma maneira de monitorar os Objetos Compartilháveis (.so) carregados na inicialização de um aplicativo específico?

1

Já passei por problemas de dependência, mas, finalmente, tenho meu aplicativo em execução. O problema é que preciso forçar a instalação de algumas bibliotecas antigas com dpkg para conseguir isso, o que, por sua vez, interrompe meu gerenciador de pacotes ( apt-get ).

Se eu puder encontrar o que .so s é chamado na carga, posso extraí-los ( alien + tar ) e ligá-los simbolicamente dentro do diretório de trabalho deste aplicativo.

Assim, mantendo meu gerenciador de pacotes e conseguindo o que eu preciso. Eu queria que multiarch fizesse o que era para que eu não estivesse aqui em primeiro lugar: (

    
por dom_hutton 01.02.2014 / 10:16

1 resposta

1

Na maioria dos casos, você pode usar ldd para determinar as bibliotecas nas quais um executável está vinculado.

Por exemplo:

# ldd /usr/bin/xz
  linux-vdso.so.1 (0x00007fff06358000)
  liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fd6a1358000)
  libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd6a1138000)
  libc.so.6 => /lib64/libc.so.6 (0x00007fd6a0d88000)
  /lib64/ld-linux-x86-64.so.2 (0x00007fd6a1590000)

Agora, se eu quisesse, poderia copiar essas bibliotecas em um caminho personalizado. No seu caso, parece que você pretende colocá-los no diretório do aplicativo. No entanto, você precisa dizer ao sistema para procurar lá, já que procurar no diretório do aplicativo não é um comportamento padrão ao carregar bibliotecas. E como o carregamento acontece antes do aplicativo ser iniciado, o aplicativo não pode alterar esse comportamento.

Para isso, você precisa usar LD_LIBRARY_PATH . Apenas faça LD_LIBRARY_PATH=/foo/bar /foo/bar/appname . Isto irá dizer ao ld-linux para olhar em /foo/bar para as bibliotecas.

Exceção:

Observe que ldd mostrará apenas as bibliotecas nas quais o aplicativo está vinculado. Também é possível que os programas carreguem bibliotecas em tempo de execução. Esse não é um comportamento muito comum e é usado principalmente como um tipo de sistema de plug-in, ou para manter a memória ocupada baixa por não carregar bibliotecas a menos que sejam realmente necessárias (talvez conforme determinado pela configuração).

    
por 01.02.2014 / 10:35