Estou instalando um programa em um servidor como um usuário não root. Especificamente, é o tmux 1.5, mas isso deve se aplicar amplamente a todos os programas instalados localmente na minha opinião (mencionei o nome do programa caso esse problema acabe não sendo meu próprio erro).
O programa requer que eu instale algumas bibliotecas dependentes (por exemplo, libevent e ncurses). Então, eu instalei os dois localmente, pois não tenho acesso root
cd $HOME/library/installation/folder
DIR=$HOME/local
./configure --prefix=$DIR
#... make ... make install
Agora, para instalar o programa, eu também precisei incluir os pacotes da biblioteca:
cd $HOME/program/installation/folder
./configure --prefix=$DIR CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib"
#... make ... make install
Ok, então isso instala o programa sem problemas no $ HOME / local / bin, mas se eu executar o executável: $ HOME / local / bin / tmux, recebo o seguinte erro:
tmux: erro ao carregar bibliotecas compartilhadas: libevent-2.0.so.5: não é possível abrir o arquivo de objeto compartilhado: Não existe esse arquivo ou diretório
Parece-me que o programa não consegue encontrar as bibliotecas desejadas, mas o arquivo libevent-2.0.so.5 realmente existe em $ HOME / local / lib, conforme especificado nas opções de configuração. Gostaria de saber como posso obter o programa para reconhecer a biblioteca instalada para executar. Tentei colocar links simbólicos em $ HOME / lib, $ HOME / bin e $ HOME / local / bin, mas nenhum deles funcionou. Todas as idéias e sugestões seriam muito apreciadas
fonte
-R $DIR/lib
queCFLAGS
é enquanto constróitmux
(e nãolibevent
). Isso não me ajudou - houve um erro final do gcc dizendo que ele não pode reconhecer-R
(também tentei sem o espaço entre-R
e$DIR
). ./configure --disable-shared Isso funcionou, atualizando oLD_LIBRARY_PATH
também funcionou. Acabei fazendolibevent
novamente com a--disable-shared
opção acima .Respostas:
Tente recriar o libevent usando
Eu suspeito que isso resolverá o seu problema porque a biblioteca será vinculada ao criar o binário e não precisa ser pesquisada em tempo de execução.
Como alternativa, se você precisar de um libevent vinculado dinamicamente, poderá adicionar o diretório contendo libevent-2.0.so.5 à sua variável de ambiente LD_LIBRARY_PATH:
fonte
Você também pode definir o RPATH, que codifica o patch de pesquisa da biblioteca no próprio binário .
Basta adicionar
-R $DIR/lib
aCFLAGS
.fonte
Sem sorte com os outros, mas isso funcionou para mim, daqui :
fonte
Fiz uma pergunta semelhante , curiosamente, também sobre a construção
tmux
de todas as coisas (embora eu ainda esteja certo de que isso se refere a praticamente qualquer situação em que o GNUconfigure
emake
sejam usados juntos.Eu acredito que uma abordagem mais limpa é utilizar o chamado "rpath" - o caminho de pesquisa da biblioteca incorporado no binário. A
-rpath
opção de pelo menos o vinculador GNUld
especifica o caminho.A linha de comando de construção ficaria da seguinte maneira:
Não é realmente fundamental aqui, mas
PKG_CONFIG_PATH
acima é simplesmente a maneira recomendada de fazer o que as pessoas alcançam enviando manualmente-L/path/to/libevent/lib -I/path/to/libevent/include
para o./configure
script. Quando você constróilibevent
, ele instala seus próprios arquivos de configuração parapkg-config
(o que é usado por./configure
). Você deve usá-lo, porque sabe comlibevent
certeza quais switches devem ser usados ao criar contra ele.De qualquer forma, em algumas situações,
-rpath
é uma abordagem mais limpa para resolver o problema.LD_LIBRARY_PATH
soluções baseadas em software, no entanto, permitem manipular a biblioteca usada pelo binário construído em tempo de execução, o que às vezes é desejável. Mas se você deseja apenas construir contra uma biblioteca específica que você colocou em um local dedicado em sua pasta pessoal em algum lugar, acho que as-rpath
soluções baseadas devem ser consideradas uma resposta canônica.O estranho é que
tmux
'scripts de construção próprios não inferem esse caminho do caminho de pesquisa da biblioteca durante a construção. Talvez eles não precisem e não devam, eu não sei. É uma coincidência que isso tenha acontecido conosco que construímostmux
?fonte