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