Não é possível encontrar lib no caminho

1

Eu estou tentando iniciar um programa que depende de algumas bibliotecas que estão no meu caminho, no entanto, o programa diz que não pode encontrar os arquivos:

11:45:27 ~ > echo $PATH
/usr/share/fsl/5.0/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/mri/Scripts:/home/mri/Scripts/MRI:/home/mri/Software/BRAINS3/bin:/home/mri/Software/BRAINS3/lib:/home/mri/Software/ITK_Build/bin:/home/mri/Software/ITK_Build/lib:/home/mri/Software/VTK_Build/bin:/home/mri/Software/VTK_Build/lib:/usr/lib/fsl/5.0

11:45:33 ~ > brains3
/home/mri/Software/BRAINS3/bin/brains3_real: error while loading shared libraries: libiplUtils.so: cannot open shared object file: No such file or directory

11:45:35 ~ > sudo find / -name libiplUtils.so
[sudo] password for mri: 
/home/mri/Software/BRAINS3/lib/libiplUtils.so

Alguém tem uma ideia de como corrigir isso?

    
por Vincent 14.02.2013 / 17:49

3 respostas

3

Você pode especificar o caminho de pesquisa da biblioteca com a variável de ambiente LD_LIBRARY_PATH .

$ export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
$ brains3

Você não deve definir essa variável para todo o seu sistema. Se você não puder / não quiser instalar o sistema de software inteiro, poderá criar um script de wrapper.

    
por 14.02.2013 / 18:25
2

O vinculador dinâmico procura por bibliotecas em LD_LIBRARY_PATH.

    
por 14.02.2013 / 18:26
2

Sistemas Unix tendem a classificar diferentes tipos de arquivos em diferentes diretórios. Existem diretórios separados para executáveis (por exemplo, /usr/bin ), documentação (por exemplo, /usr/man , /usr/info ,…), bibliotecas nativas (por exemplo, /usr/lib ), bibliotecas Perl (por exemplo, /usr/lib/perl5 ) e assim por diante. Correspondentemente, existem diferentes variáveis de caminho, todas com a mesma sintaxe (lista de diretórios separados por dois pontos): PATH para executáveis, MANPATH para páginas man, LD_LIBRARY_PATH para bibliotecas nativas, PERL5LIB para bibliotecas Perl e assim por diante.

Para bibliotecas nativas, há bibliotecas padrão do sistema que estão no caminho de pesquisa, sejam elas mencionadas na variável de ambiente LD_LIBRARY_PATH ou não. No Linux, esses diretórios são listados em /etc/ld.so.conf (também, /lib e /usr/lib estão sempre no caminho de pesquisa).

Você tem várias possibilidades:

  • Adicione /home/mri/Software/BRAINS3/lib a /etc/ld.so.conf (específicas do Linux, outras variantes unix podem ter um arquivo semelhante). Execute ldconfig para que a alteração tenha efeito.
  • Adicione export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib em /etc/profile (aplica-se a todos os usuários) ou em ~/.profile (aplica-se somente a você).
  • Crie um script de wrapper:

    #!/bin/sh
    export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
    exec /home/mri/Software/BRAINS3/bin/brains3 "$@"
    
  • Crie links simbólicos para as bibliotecas em /home/mri/Software/BRAINS3/lib em outro diretório no caminho de pesquisa:

    ln -s /home/mri/Software/BRAINS3/bin/brains3/lib*.so.* /usr/local/lib/
    

¹ LD_LIBRARY_PATH é o nome da maioria das variantes unix, mas o Mac OS X usa DYLD_LIBRARY_PATH .

    
por 15.02.2013 / 00:44