Trabalho com um software de código aberto que construí localmente. Após a compilação, o manual diz para executá-lo assim enquanto estiver dentro do diretório de compilação
$ LD_LIBRARY_PATH=../applicationExeFile
Em seguida, o aplicativo funciona bem.
Agora tentei fazer um shell simples para chamar rapidamente sem digitar muito (run.sh) com o seguinte conteúdo:
#!/bin/bash
export -n LD_LIBRARY_PATH=.
./applicationExeFile
Mas parece que LD_LIBRARY_PATH não fica registrado no shell pois recebo erro referente ao executável do aplicativo não consigo encontrar uma biblioteca que esteja na mesma pasta
./applicationExeFile: error while loading shared libraries: libchart.so: cannot open shared object file: No such file or directory
O que estou fazendo de errado e como conseguir isso?
A primeira questão é que,
-n
na verdade , un exporta uma variável, não a exporta. Vejahelp export
:Em seguida,
.
refere-se ao diretório de trabalho atual do processo. Isso significa que seu script ainda precisa ser executado a partir do diretório específico em que seu programa está instalado, o que parece um pouco inútil. Basta usar um caminho completo. Se seu programa estiver em/home/dekker/myprogram
, faça seu script assim:Ou apenas:
pois não há nada
bash
específico e você não precisa daexport
declaração separada. O usoexec
também salva um processo e torna o tratamento do sinal e o relatório do status de saída mais confiáveis.