O programa vem com seu próprio carregador dinâmico . É muito raro que os programas precisem de seu próprio carregador dinâmico: normalmente, o do seu sistema também funcionará. Isso pode ser necessário se o programa estiver ligado a uma biblioteca padrão diferente do GNU libc ou se estiver ligado a um GNU libc compilado com configurações estranhas.
Pode ser o suficiente para informar ao carregador onde encontrar as bibliotecas preferidas do programa. Sua tentativa quase faz isso, mas não é bem assim. Se LD_LIBRARY_PATH
ainda não estiver no ambiente, a atribuição LD_LIBRARY_PATH=$CWD/LIB:$LD_LIBRARY_PATH
define apenas uma variável de shell, não uma variável de ambiente, portanto, o programa não vê nada. Além disso, $CWD
normalmente se expande para a sequência vazia, você provavelmente quis dizer $PWD
ou melhor $(dirname "$0")
(ou seja, o diretório que contém o script). Tenha também em atenção que utilizou lib
e LIB
de forma inconsistente na sua pergunta. Experimente
#!/bin/sh
export LD_LIBRARY_PATH="$(dirname "$0")/lib:$LD_LIBRARY_PATH"
exec "$(dirname "$0")/some_binary" "$@"
ou melhor, para evitar uma entrada vazia no final de LD_LIBRARY_PATH
, se não tiver sido definida antes (isso pode ser ruim porque uma entrada vazia representa o diretório atual, embora no final do caminho seja apenas prejudicial se uma biblioteca não for encontrada onde deveria estar):
#!/bin/sh
export LD_LIBRARY_PATH="$(dirname "$0")/lib:$LD_LIBRARY_PATH"
case "$LD_LIBRARY_PATH" in *:) LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:};; esac
exec "$(dirname "$0")/some_binary" "$@"