ld não consegue encontrar .so

2

Eu instalei o zeromq 3.2.5 da fonte

$ wget http://download.zeromq.org/zeromq-3.2.5.tar.gz
$ tar xf zeromq-3.2.5.tar.gz
$ cd zeromq-3.2.5
$ ./configure && make -j4
$ sudo make install

Isso instala libzmq.so.3 em /usr/local/lib :

$ sudo updatedb
$ locate libzmq.so.3
/usr/local/lib/libzmq.so.3
/usr/local/lib/libzmq.so.3.0.0

Confirmei que /usr/local/lib está no caminho de pesquisa ld :

$ grep /usr/local/lib /etc/ld.so.conf.d/*
/etc/ld.so.conf.d/libc.conf:/usr/local/lib

Confirmei que ld pode encontrar a biblioteca:

$ ldconfig -v 2>/dev/null | egrep -e zmq\|^/
...
/usr/local/lib:
  libzmq.so.3 -> libzmq.so.3.0.0
...

No entanto, se eu executar ldd no meu aplicativo, ele não encontrará libzmq.so.3

$ ldd test_app
  ...
  libzmq.so.3 => not found
  ...

Se eu definir LD_LIBRARY_PATH , então funciona

$ export LD_LIBRARY_PATH=/usr/local/lib
$ ldd test_app
  ...
  libzmq.so.3 => /usr/local/lib/libzmq.so.3 (0x00007f22418d9000)
  ...

Pergunta:

  • Por que o ld não encontra libzmq.so.3 sem LD_LIBRARY_PATH quando está em um caminho padrão?
  • Como posso corrigir isso sem ter que definir LD_LIBRARY_PATH ?

Notas:

O RPATH está definido no binário, caso seja importante:

$ readelf -a test_app | grep RPATH
 0x000000000000000f (RPATH)              Library rpath: [/home/steve/src/.../bin/gcc-4.9.3/debug]

Estou executando o Ubuntu 14.04 caso seja de alguma utilidade

    
por Steve Lorimer 21.07.2016 / 20:32

1 resposta

2

Quando você adiciona novas bibliotecas aos diretórios do sistema, pode ser necessário atualizar o cache do vinculador com

ldconfig

Isso precisa ser executado como root .

Sem esse comando, o vinculador de tempo de execução terá uma ideia obsoleta de quais bibliotecas estão disponíveis.

Você também precisa fazer isso se decidir adicionar novos diretórios ao caminho do vinculador do sistema.

A configuração de LD_LIBRARY_PATH fez o vinculador de tempo de execução procurar manualmente nesse diretório, fora do cache.

    
por 21.07.2016 / 21:01

Tags