Eu não acho que haja alguma maneira de fazer isso de forma robusta puramente com variáveis ambientais. O problema com o uso de LIBRARY_PATH
parece ser que qualquer opção -L
tem precedência. Se, por alguma razão, o comando gcc
tiver -L/usr/lib64
, isso será pesquisado primeiro e a versão mais antiga da biblioteca será encontrada. Aparentemente você vai alterar os Makefiles, você também deve ter cuidado para que um -L/usr/lib64
não apareça primeiro.
Olhando para a sua pergunta SO, não parece que o problema acima seja um problema. No entanto, há% trailing :
desnecessário no valor da variável LIBRARY_PATH
, o que pode explicar por que não funcionou.
Além disso, conforme observado na resposta à questão do SO, LD_LIBRARY_PATH
é usado pelo vinculador dinâmico e só é relevante no runtime para o seu aplicativo. Isso pode ser usado se a localização das bibliotecas dinâmicas não puder ser encontrada quando o aplicativo for executado. O que é usado pelo vinculador GNU é LD_RUN_PATH
, que essencialmente faz para -rpath
o que LIBRARY_PATH
faz para -rpath
, exceto que especificar qualquer -rpath
significa que LIBRARY_PATH
será ignorado (e não apenas menor precedência).
O que você pode tentar então é:
LIBRARY_PATH=/opt/lib_name/X/lib LD_RUN_PATH=/opt/lib_name/X/lib make
Algo que pode ser mais robusto é criar um script de wrapper para gcc
que inclua as opções necessárias, por exemplo:
#!/bin/sh
gcc -L/opt/lib_name/X/lib -Wl,-rpath,/opt/lib_name/X/lib "$@"
Nomeie o arquivo gcc
, torne-o executável e coloque-o em um diretório sozinho (ou pelo menos um no qual não haja arquivos com o mesmo nome dos comandos vitais). Então você pode executar make
como:
PATH=/path/to/script:$PATH make