Alterando a biblioteca vinculada para um executável (CentOs 6)

24

Eu tenho um executável vinculado assim:

  $ ldd a.out
        libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000)
        libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000)
        libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000)
.
.

Onde as bibliotecas libcrypto e libssl são openssl 1.0.0-fips libs. Eu quero experimentar com as bibliotecas 1.0.1, então eu as construí no meu diretório home. Existe uma maneira de obter a.out para revincular contra minhas novas bibliotecas openssl sem muita dor? Eu gostaria de evitar

  • Ter que revincular a.out (porque as ferramentas de construção são muito complicadas)
  • Alterando qualquer configuração global (porque outros desenvolvedores trabalham nesta máquina)

É possível fazer o que estou esperando aqui?

    
por Fixee 17.11.2011 / 18:10

2 respostas

17

You can temporarily substitute a different library for this particular execution. In Linux, the environment variable LD_LIBRARY_PATH is a colon-separated set of directories where libraries should be searched for first, before the standard set of directories; this is useful when debugging a new library or using a nonstandard library for special purposes. The environment variable LD_PRELOAD lists shared libraries with functions that override the standard set, just as /etc/ld.so.preload does. - Shared Libraries

Você também pode invocar o carregador diretamente:

/lib/ld-linux.so.2 --library-path path executable

    
por 17.11.2011 / 18:31
13

Grave um script de wrapper que defina a variável de ambiente LD_LIBRARY_PATH . Este é o pingente de PATH para bibliotecas compartilhadas. O caminho de pesquisa do sistema é sempre pesquisado após os diretórios listados em $LD_LIBRARY_PATH . Consulte o manual do vinculador dinâmico para referência.

#!/bin/sh
export LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib
exec /path/to/a.out "$@"

Ou, por um tempo, diretamente na linha de comando:

LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib ./a.out

Como alternativa, se você quiser modificar o binário, tente chrpath , que permite editar o caminho de pesquisa da biblioteca em o executável.

    
por 18.11.2011 / 02:20