Causa raiz do problema
O erro está ocorrendo porque, em tempo de compilação, ele está pesquisando corretamente o caminho /usr/local/lib antes de pesquisar o caminho padrão do sistema, assim, no momento do link, todos os símbolos são resolvidos. No entanto, em tempo de execução, o caminho /usr/local/lib não é pesquisado antes do /lib/i386-linux-gnu preexistente, de forma que ele encontre a biblioteca com nome idêntico no último diretório antes da biblioteca desejada em /usr/local/lib .
Solução, versão fácil: caminho de pesquisa da biblioteca global (com ressalva)
A versão fácil é inserir /usr/local/lib na variável de ambiente LD_LIBRARY_PATH ou /etc/ld.so.conf config e executar ldconfig . Para a solução "rápida", você quer /usr/local/lib antes de mais nada.
No entanto, esse é o azarado, você não quer forçar todos os seus programas a pesquisar /usr/local/lib antes do caminho da biblioteca do sistema (por exemplo: /lib/i386-linux-gnu ) - isso faz com que É altamente provável que você cause um conflito de versões com uma biblioteca do sistema usada por outro programa fornecido pelo seu sistema ou pelo gerenciador de pacotes e faça com que o programa do sistema falhe. Isso significa "fazer as coisas corretamente", você não deseja usar LD_LIBRARY_PATH , LD_PRELOAD ou /etc/ld.so.conf para forçar seu caminho de pesquisa. ( Na verdade, LD_PRELOAD deve ser evitado fora do trabalho de desenvolvimento )
Solução, versão estável: atualizar o ELF RPATH
Em vez disso, ao compilar suas próprias versões de aplicativos, você pode usar a variável de ambiente LD_RUN_PATH (gnu ld & gold) ou definir LDFLAGS to -Wl,-rpath /usr/local/lib para gerenciar o caminho interno de pesquisa da biblioteca de seus binários (incluindo dependências de bibliotecas compartilhadas .so)
Por exemplo, você pode executar o seguinte para configurar sua biblioteca:
export LD_RUN_PATH=/usr/local/lib
./configure --prefix=/usr/local <--yourflags>
make install
Minha experiência com essa técnica está no HP-UX, onde o utilitário chatr mostrará o rpath incorporado (e o sinalizador de link é +b em vez de -rpath). readelf ou objdump provavelmente mostrará o rpath no linux.
patchelf afirma ser capaz de atualizar o rpath em binários existentes no linux x86, mas eu mesmo não testei.