Variável de ambiente Bash para incluir caminho de bibliotecas c

1

Eu construí uma biblioteca C (compilada da fonte) abaixo da minha pasta pessoal e agora tenho que construir um novo pacote que depende dessa biblioteca. Ao executar o script de configuração, recebo o erro% configure: error: The required <package> library was not found.

Existe uma variável de ambiente que eu possa editar para fazer meu script pesquisar o caminho da biblioteca?

Já experimentei LD_LIBRARY_PATH

    
por Yitzchak 16.11.2011 / 23:46

2 respostas

3
  • Muitas bibliotecas usam pkg-config, portanto, diga onde encontrar seus arquivos .pc instalados localmente:

    export PKG_CONFIG_PATH="$LOCAL/lib/pkgconfig:$LOCAL/share/pkgconfig"
    

    (Os diretórios do sistema serão incluídos automaticamente.)

    Às vezes, um comando específico da biblioteca é usado em vez do genérico pkg-config ; por exemplo, krb5-config . Nesse caso, aponte para o diretório bin :

    export PATH="$LOCAL/bin:$PATH"
    
  • Se o pkg-config não for usado, você terá que apontar manualmente o compilador e o linker para o lugar certo.

    export CFLAGS="-I$LOCAL/include"     # for the C compiler
    export CXXFLAGS="-I$LOCAL/include"   # for the C++ compiler
    export LDFLAGS="-L$LOCAL/lib"        # for the linker
    
  • ./configure --help normalmente listará uma série de --with-feature=... opções, que permitem especificar locais de cada biblioteca separadamente.

    Geralmente, ./configure --help também lista variáveis de ambiente para cada biblioteca (como CURL_CFLAGS e CURL_LIBS ); procure por "sinalizadores de compilador C" ou "sinalizadores de linker" no texto de ajuda.

    Se você precisar de mais de uma biblioteca personalizada, isso rapidamente se tornará inconveniente; você deve especificar o caminho do pkg-config e os cflags para todas as bibliotecas de uma só vez.

  • Você pode também precisar apontar o carregador para o local da sua biblioteca durante a compilação. Para Linux, seria:

    export LD_LIBRARY_PATH="$LOCAL/lib"
    

    Isso não deve ser necessário quando executar programas compilados; o linker terá adicionado os caminhos corretos para o próprio binário compilado (procure por "Library rpath" em readelf -d yourprogram se você quiser verificar).

    Para o Mac OS X, definir DYLD_LIBRARY_PATH deve ter um efeito semelhante; otool pode ser usado para inspecionar aplicativos.

Em todos os exemplos acima, $LOCAL será o prefixo que você usou ao instalar as bibliotecas; por exemplo, se você usou ./configure --prefix ~/usr , use ~ / usr aqui.

    
por 17.11.2011 / 00:13
0

Se você não instalou a biblioteca, precisará passar seu caminho de inclusão para o script de configuração, semelhante ao descrito em esta questão .

LD_LIBRARY_PATH seria usado depois de compilado, para que você possa encontrar a biblioteca em tempo de execução.

    
por 17.11.2011 / 00:10

Tags