Instalando várias versões de uma biblioteca compartilhada

1

Estou executando o Ubuntu 10.04 e quero usar o tmux 1.6. O tmux depende da libevent 2.

Minha solução foi compilar a libevent2 e soltar em /usr/local/lib , depois compilar o tmux com essa lib e colocar em /usr/local/bin . Isso funciona muito bem até ... eu reiniciar. Isso é apenas uma suposição de minha parte, mas parece que outros binários agora estão vinculados à biblioteca libevent2 presumivelmente porque estão no caminho da biblioteca. Como existem 60+ pacotes com dependências libevent1, isso faz com que minha instalação perca a cabeça.

Existe uma maneira idiomática de abordar a execução de um aplicativo que tenha uma dependência de biblioteca principal em uma versão diferente? Devo apenas vincular estaticamente a lib?

    
por nsfyn55 27.06.2012 / 16:32

2 respostas

0

link sugere

Loading specific libraries

If you're running an older application that needs a specific older version of a shared library, or if you're developing a new shared library or version of a shared library, you might want to override the default search paths used by the loader. This may also be needed by scripts that use product-specific shared libraries that may be installed in the /opt tree. Just as you can set the PATH variable to specify a search path for executables, you can set the LD_LIBRARY_PATH variable to a colon-separated list of directories that should be searched for shared libraries before the system ones specified in ld.so.cache. For example, you might use a command like:

export LD_LIBRARY_PATH=/usr/lib/oldstuff:/opt/IBM/AgentController/lib

O artigo ligado ilustra como usar o ldd para descobrir de quais bibliotecas um programa depende.

    
por 27.06.2012 / 17:00
0

Programas binários compilados geralmente são linkados /usr/lib/libXXX.so.1.2.3

Se você usar uma nova versão específica, poderá soltá-la em /usr/lib/libXXX.so.3.4.5 e seu programa recém-criado deve se ligar a isso.

Você pode verificar, se os programas antigos agora se ligam à nova biblioteca por ldd /path/to/program .

Se isso realmente acontecer, você pode:

  • coloque a nova lib em um diretório separado /special/path/lib e
  • inicie seu programa especial com um script de shell de wrapper, que define %código% e então lança o binário ou
  • se você mesmo compilar seu programa, poderá passar o LD_LIBRARY_PATH=/special/path/lib:$LD_LIBRARY_PATH , isso codifica o caminho de busca para o lib especial em seu programa (legal porque funciona sem script de wrapper)
por 27.06.2012 / 17:56