variável de ambiente PKG_CONFIG_PATH

54

Considere ajustar a variável de ambiente PKG_CONFIG_PATH se você software instalado em um prefixo não padrão. O que isso significa?

    
por MKJ 31.10.2012 / 20:00

8 respostas

46

PKG_CONFIG_PATH é uma variável de ambiente que especifica caminhos adicionais nos quais pkg-config procurará por seus arquivos .pc.

Esta variável é usada para aumentar o caminho de pesquisa padrão do pkg-config. Em um sistema Unix típico, ele pesquisará nos diretórios /usr/lib/pkgconfig e /usr/share/pkgconfig . Isso geralmente cobre módulos instalados no sistema. No entanto, alguns módulos locais podem ser instalados em um prefixo diferente, como /usr/local . Nesse caso, é necessário prefixar o caminho de busca para que o pkg-config possa localizar os arquivos .pc.

O programa pkg-config é usado para recuperar informações sobre o programa instalado. bibliotecas no sistema. O uso principal de pkg-config é fornecer os detalhes necessários para compilar e vincular um programa a uma biblioteca. Esses metadados são armazenados em arquivos pkg-config. Esses arquivos têm o sufixo .pc e residem em locais específicos conhecidos pela ferramenta pkg-config.

Para verificar o valor PKG_CONFIG_PATH , use este comando:

echo $PKG_CONFIG_PATH

Para definir o valor PKG_CONFIG_PATH use:

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

ou

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    
por devav2 31.10.2012 / 20:59
33

A primeira resposta não é tecnicamente explícita o suficiente. Na página man (abra um terminal, digite man pkg-config ):

  
    

pkg-config recupera informações sobre pacotes de arquivos de metadados especiais.      Esses arquivos são nomeados após o pacote e têm uma extensão .pc . Na maioria      sistemas, pkg-config parece em /usr/lib/pkgconfig , /usr/share/pkgconfig ,       /usr/local/lib/pkgconfig e /usr/local/share/pkgconfig para esses arquivos. isto      irá procurar adicionalmente no separado por dois pontos (no Windows, separados por ponto-e-vírgula)      lista de diretórios especificados pela variável de ambiente PKG_CONFIG_PATH .

  

Portanto, o programa pkg-config não está no diretório PKG_CONFIG_PATH ; no entanto, se você instalar uma biblioteca, para que as informações para usá-la em um script automake estejam acessíveis, ela precisa estar em um diretório em que pkg-config esteja ciente.

    
por Ian Martin 31.07.2013 / 08:03
28

Para ver onde o pkg-config (versão 0.24 ou posterior) procura bibliotecas instaladas por padrão, use o seguinte comando:

pkg-config --variable pc_path pkg-config

Para modificar esse caminho, defina a variável de ambiente PKG_CONFIG_PATH . O arquivo man states PKG_CONFIG_PATH is:

  

Uma lista separada por dois-pontos (no Windows, separada por ponto-e-vírgula) de   diretórios para procurar arquivos .pc. O diretório padrão sempre   ser pesquisado depois de procurar o caminho; o padrão é   libdir / pkgconfig: datadir / pkgconfig onde libdir é a libdir onde   pkg-config e datadir é o datadir onde o pkg-config foi instalado.

    
por GrandAdmiral 08.11.2013 / 22:24
6

Você está tentando criar um software, digamos Widget. Widget depende de outra biblioteca, libcog por causa do argumento. O processo de construção do widget (provavelmente um script de configuração) está usando o pkg-config para determinar como usar o libcog. O pkg-config não sabe nada sobre o libcog.

Se o libcog não estiver instalado, esse é o seu problema. Existe uma boa chance de que uma instalação padrão do libcog conserte o problema. Dependendo do seu sistema, você pode precisar instalar uma versão de "desenvolvedor" adicional do pacote; freqüentemente tem "-devel" ou "-dev" no final, então se você instalar o "libcog", você também precisará instalar o "libcog-devel".

Se o libcog estiver instalado, ele provavelmente não será instalado de forma que o pkg-config possa encontrá-lo. Provavelmente existe um arquivo libcog.pc em algum lugar do seu sistema. Por uma questão de argumento, é em /opt/cog/lib/pkgconfig/libcog.pc. Nesse caso, você pode dizer ao pkg-config sobre isso configurando o PKG_CONFIG_PATH para o diretório que contém o libcog.pc. Então, em um shell Bourne ou similar, algo como

export PKG_CONFIG_PATH=/opt/cog/lib/pkgconfig/

Uma vez feito isso, esperamos que volte a executar o comando que falhou.

Se o libcog estiver instalado, incluindo as bibliotecas e arquivos de cabeçalho, e você não tiver um arquivo libcog.pc, as coisas estão indo mal. Presumivelmente, uma instalação padrão do libcog inclui as informações, ou então o Widget não confiaria nelas. Eu primeiro investigaria a reinstalação do libcog. É possível criar manualmente o arquivo libcog.pc, mas acertar é difícil e altamente específico para uma determinada biblioteca.

    
por Alan De Smet 01.05.2014 / 18:44
4

Eu olhei para o man-page no meu sistema de 64 bits e fiquei um pouco confuso. Dizia em uma linha:

  

pkg-config recupera informações sobre pacotes de especial          arquivos de metadados. Esses arquivos são nomeados após o pacote, com          a extensão .pc. Por padrão, o pkg-config procura no diretório          prefixo / lib / pkgconfig para esses arquivos; ele também irá procurar          a lista separada por dois pontos (no Windows, separada por ponto-e-vírgula) de          diretórios especificados pelo ambiente PKG_CONFIG_PATH vari‐          capaz.

Eu tinha assumido que sempre era procurado nos diretórios lib / pkgconfig. Acontece que são os próprios diretórios. No meu caso, eu estava tentando compilar o tutorial hello world gtk. Eu localizo o arquivo que eu quero, por exemplo.

locate gtk | grep '\.pc'

Entre os resultados estão:

  

/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc

Finalmente, foi fazer uma exportação.

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
    
por possumkeys 01.01.2015 / 09:13
4

Parece-me que a maioria das respostas tem muita informação do que o necessário.

O software que alguém instala pode (e geralmente usa) depende de algumas bibliotecas e / ou cabeçalhos e o Sistema usa o pkg-config para encontrá-los.

Dito isso, pkg-config procura por esses arquivos em diretórios do sistema predefinidos (padrão). Essas pastas são "prefixo". Por exemplo. espera-se que uma biblioteca que tenha o prefixo /usr/local tenha cabeçalhos em /usr/local/include , e a própria biblioteca esteja em /usr/local/lib . No entanto, pkg-config procura por bibliotecas também no diretório listado na variável de ambiente PKG_CONFIG_PATH .

Então, se você instalar o software fora da lista padrão de pastas, você deve "ajustar" a lista, ou seja, adicionar seus diretórios a PKG_CONFIG_PATH

$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>

Para mais informações, você pode procurar aqui e aqui

    
por clobrano 31.03.2015 / 09:45
1

Isso significa que você está tentando construir algo a partir do código-fonte e não consegue encontrar todas as dependências de que precisa. O script pkg-config usado para localizar os arquivos de desenvolvimento para essas bibliotecas gera esta mensagem.

    
por dobey 31.10.2012 / 20:53
0

Eu estava tentando instalar a versão mais recente do axel e executei ./configure e recebi o seguinte:

configure: error: Package requirements (openssl) were not met:

No package 'openssl' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables SSL_CFLAGS
and SSL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Então eu tentei:

$ pkg-config --cflags openssl

e eu recebi:

Package openssl was not found in the pkg-config search path.
Perhaps you should add the directory containing 'openssl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'openssl' found

Como é óbvio, eu tinha o openssl instalado ( sudo apt-get install openssl ) Mas na saída acima, como você pode ver, ele diz "No package 'openssl' found". Então, para ter certeza que fiz:

find / -type f -name "*.pc" |& grep -iv permission | grep openssl

Acontece que eu preciso de algum outro pacote com certeza, então pesquisei um pouco e descobri que tinha que instalar este pacote:

sudo apt-get install libssl-dev

E tudo isso não tem nada a ver com a alteração da variável env do caminho pkg-config.

    
por Shayan 28.02.2018 / 15:08

Tags