Utilizando prelink em bibliotecas carregadas manualmente? (como bibliotecas nativas de Java)

2

Tanto quanto eu posso dizer, o prelink só funciona com bibliotecas dinâmicas que um executável declara que precisa em tempo de compilação (as bibliotecas que podem ser encontradas com ldd ). Não parece incluir bibliotecas dinâmicas que são carregadas manualmente pelo executável, como plugins ou (no meu caso particular) bibliotecas nativas Java. Existe alguma maneira de forçar o prelink a cobrir esse tipo de biblioteca?

    
por Matthew Cline 11.10.2013 / 03:49

1 resposta

1

Quando você executar prelink em um binário ELF, ele somente inspecionará o próprio binário e suas dependências (conforme mencionado nas seções ELF .dynamic e .dynstr ).

Você deve poder usar:

prelink --libs-only libone.so libtwo.so [...]

Se uma biblioteca for dependente de outra, talvez seja necessário especificá-las juntas na mesma linha de comando (isto é, se elas não estiverem no caminho normal do vinculador).

No entanto, , uma parte importante da pré-vinculação é ser capaz de determinar o melhor lugar para carregar cada biblioteca para um processo, é possível que você não ganhe o benefício total de prelinking fazendo bibliotecas isoladamente. Isso não deve acontecer enquanto os dois forem verdadeiros:

  • você usa o cache compartilhado ( /etc/prelink.cache ) para que todas as bibliotecas tenham uma base exclusiva
  • você não usa o -m (economizar memória) ao pré-preparar

Confirme se a operação foi bem sucedida com

prelink --print-cache
    
por 11.10.2013 / 12:12