Considere ajustar a variável de ambiente PKG_CONFIG_PATH se você instalou o software em um prefixo não padrão. O que isto significa ?
Considere ajustar a variável de ambiente PKG_CONFIG_PATH se você instalou o software em um prefixo não padrão. O que isto significa ?
Respostas:
PKG_CONFIG_PATH
é uma variável de ambiente que especifica caminhos adicionais nos quais pkg-config
os arquivos .pc serão pesquisados.
Essa variável é usada para aumentar o caminho de pesquisa padrão do pkg-config. Em um sistema Unix típico, ele procurará nos diretórios /usr/lib/pkgconfig
e /usr/share/pkgconfig
. Isso geralmente abrange os 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 preceder o caminho de pesquisa para que o pkg-config possa localizar os arquivos .pc.
O pkg-config
programa é usado para recuperar informações sobre bibliotecas instaladas no sistema. O principal uso de pkg-config
é fornecer os detalhes necessários para compilar e vincular um programa a uma biblioteca. Esses metadados são armazenados nos arquivos pkg-config. Esses arquivos possuem o sufixo .pc e residem em locais específicos conhecidos pela ferramenta pkg-config.
Para verificar o PKG_CONFIG_PATH
valor, use este comando:
echo $PKG_CONFIG_PATH
Para definir o PKG_CONFIG_PATH
valor, use:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
ou
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
A primeira resposta não é tecnicamente explícita o suficiente. Na página do manual (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.pc
extensão. Na maioria dos sistemas,pkg-config
olha em/usr/lib/pkgconfig
,/usr/share/pkgconfig
,/usr/local/lib/pkgconfig
e/usr/local/share/pkgconfig
para esses arquivos. Além disso, ele procurará na lista de diretórios separados por dois pontos (no Windows, separados por ponto e vírgula) especificados pelaPKG_CONFIG_PATH
variável de ambiente.
Portanto, o pkg-config
programa não está no PKG_CONFIG_PATH
diretório; no entanto, se você instalar uma biblioteca, as informações para usá-las em um automake
script sejam acessíveis e precisam estar em um diretório pkg-config
.
/usr/local/lib/x86_64-linux-gnu
lançados como um local de pesquisa automática de graça (com um vazio PKG_CONFIG_PATH
) e, de fato, muitos .pc
arquivos - notáveis, incluindo GTK + et al. - mora lá. A razão para isso é habilitar a disponibilidade de várias arquiteturas de um pacote simultaneamente, conforme descrito aqui: askubuntu.com/questions/449348/…
pkg-config
serão pesquisados no seu sistema: askubuntu.com/a/373217/436580
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 PKG_CONFIG_PATH
variável de ambiente. Os estados do arquivo man PKG_CONFIG_PATH
são:
Uma lista de diretórios separados por dois pontos (no Windows, separados por ponto e vírgula) para procurar arquivos .pc. O diretório padrão será sempre pesquisado depois de pesquisar o caminho; o padrão é libdir / pkgconfig: datadir / pkgconfig em que libdir é o libdir em que pkg-config e datadir é o datadir em que o pkg-config foi instalado.
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
diretório em branco e ainda ter diretórios pesquisados padrão, além de definir um valor não em branco não limpa os padrões.
Você está tentando criar um software, digamos, Widget. O widget depende de outra biblioteca, libcog por razões de argumento. O processo de construção do widget (provavelmente um script de configuração) está usando o pkg-config para determinar como usar a libcog. O pkg-config não sabe nada sobre libcog.
Se a libcog não estiver instalada, esse é o seu problema. Há uma boa chance de que uma instalação padrão do libcog resolva o problema. Dependendo do seu sistema, pode ser necessário instalar uma versão "desenvolvedor" adicional do pacote; ele geralmente possui "-devel" ou "-dev" no final; portanto, se você instalar o "libcog", poderá também precisar instalar o "libcog-devel".
Se o libcog estiver instalado, provavelmente não está 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, está em /opt/cog/lib/pkgconfig/libcog.pc. Nesse caso, você pode contar ao pkg-config sobre isso configurando PKG_CONFIG_PATH no diretório que contém libcog.pc. Então, em uma concha Bourne ou similar, algo como
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
Feito isso, executar novamente o comando que falhou funcionará.
Se o libcog estiver instalado, incluindo as bibliotecas e os 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, caso contrário, o Widget não confiaria nela. 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.
Eu olhei para a página de manual no meu sistema de 64 bits e fiquei um pouco confuso. Dizia em uma linha:
O pkg-config recupera informações sobre pacotes de arquivos de metadados especiais. Esses arquivos são nomeados após o pacote, com a extensão .pc. Por padrão, o pkg-config procura no prefixo do diretório / lib / pkgconfig esses arquivos; ele também procurará na lista de diretórios separados por dois pontos (no Windows, separados por ponto e vírgula) especificados pela variável de ambiente PKG_CONFIG_PATH.
Eu assumi que ele já estava nos diretórios lib / pkgconfig. Acontece que são os próprios diretórios. No meu caso, 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/
man
página é simplificadora demais para sistemas modernos com capacidade para várias arquiteturas. Fiquei confuso por um tempo porque, no Debian 8 x86, pkg-config
já aparece na pasta x86_64 (sem nada PKG_CONFIG_PATH
). Não tenho certeza de como isso foi incorporado, mas a linha de comando para investigar isso mostrado pelo @GrandAdmiral indica que é controlado pelo --variable pc_path
que está definido (de alguma forma!) Para pkg-config
o próprio pacote.
Parece-me que a maioria das respostas tem muita informação do que o necessário.
O software que se instala pode (e geralmente depende) de algumas bibliotecas e / ou cabeçalhos e o Sistema usa o pkg-config para encontrá-los.
Dito isso, pkg-config
procura esses arquivos nos diretórios do sistema predefinidos (padrão). Essas pastas são "prefixo". Por exemplo, uma biblioteca que tem prefixo /usr/local
deverá ter cabeçalhos /usr/local/include
, e a própria biblioteca estará em /usr/local/lib
.
O pkg-config, no entanto, procura bibliotecas também no diretório listado na variável de ambiente PKG_CONFIG_PATH .
Então, se você instalar um software fora da lista padrão de pastas, terá que "ajustar" a lista, incluindo seus diretórios em PKG_CONFIG_PATH
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
PKG_CONFIG_PATH
especifica diretórios adicionais nos quais procurar apenas arquivos yourPkg.pc
( pkg-config
especificação). Não afeta itens específicos do pacote, como diretórios de pesquisa de bibliotecas.
Eu estava tentando instalar a versão mais recente do axel e executei ./configure
e obtive 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 tenho:
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
Tão óbvio que eu tinha o openssl instalado ( sudo apt-get install openssl
) Mas, na saída acima, como você pode ver, ele declara "Nenhum pacote 'openssl' encontrado". Então, para ter certeza que sim:
find / -type f -name "*.pc" |& grep -iv permission | grep openssl
Acontece que eu preciso de algum outro pacote, com certeza, então um pouco pesquisando e descobri que tinha que instalar este pacote:
sudo apt-get install libssl-dev
E tudo isso não tinha nada a ver com a alteração da variável env do caminho do pkg-config.
Aqueles que estão usando https://github.com/confluentinc/confluent-kafka-go
Por favor, siga as instruções de instalação do librdkafka
Agora você pode usar go install / go run go build