Como resolver problemas com o pkg-config

O pkg-config é responsável por checar todas as dependências do código-fonte do programa que estamos compilando, e se encontrar erros, mostrará um aviso de Package Requirements.

[ Hits: 11.135 ]

Por: Eduardo Mozart de Oliveira em 06/11/2015 | Blog: http://www.eduardomozartdeoliveira.wordpress.com/


Introdução



Estava com uma vontade de instalar o Xfce para que ele pudesse ficar como o da foto no site http://xfce.org/ no CentOS 5.
Linux: Como resolver problemas com o pkg-config
Provavelmente é possível, sendo que é preciso a instalação dos temas, ícones e dependências para que possamos ter a interface como a vendida na página inicial do projeto.

Não pude obtê-la no CentOS 5 porque fui vencido pelo cansaço (é dependência em cima de dependência!), mas pude aprender coisas bem interessantes pelo caminho.

Aprendi a fazer pacotes RPM, corrigir problemas de permissão negada ao compilar do código-fonte e (mais ou menos) como funciona o pkg-config! Não é o máximo?

Se você está lendo este texto e quer ter a aparência vendida no site do Xfce, recomendo usar o Fedora. Ele é um projeto que possui a RHEL por trás (o CentOS não possui ajuda nenhuma da Red Hat), e ele é usado como "plataforma de testes" da RHEL.

Todas as novas versões de pacotes são lançadas nele primeiro e, se aprovadas, são incorporadas no Red Hat. Ele possui a vantagem de estar sempre atualizado e de possuir todas as bibliotecas necessárias do Xfce em pacotes RPM e disponíveis pelo yum em suas últimas versões (não use o Fedora em servidores: cada versão conta apenas com 1 ano e 1 mês de suporte).

O glib nos repositórios do RHEL e do CentOS "pararam" no tempo (por questões de segurança) e para compilarmos as dependências do GTK+ e outras é uma droga por que precisamos das novas versões não disponíveis nestes sistemas se não as instalarmos pelo código-fonte - por isso a recomendação do Fedora.

Se você quer instalar interface gráfica, provavelmente está instalando em um computador que não atua como servidor, mas para uso diário, e o Fedora pode ser uma ótima alternativa.

Mas vamos ao que interessa neste tutorial: o pkg-config. Se você é amante fanático do yum ou do apt-get, você não o conhece - ainda. Você somente o conhecerá quando um pacote não estiver disponível no seu repositório e você ter que instalá-lo no braço. Como na imagem abaixo:
Linux: Como resolver problemas com o pkg-config
ERRO #1: No package 'XXX' was found.

O pkg-config é responsável por checar todas as dependências do código-fonte do programa que estamos compilando, e se encontrar erros, mostrará um aviso de Package Requirements.

Os Package Requirements são pacotes que você precisa instalar antes de prosseguir com a compilação e/ou uso do mesmo.

Anote o nome que ele passar em cada parênteses (no caso, apenas libffi) e use o comando abaixo para verificar o porquê da mensagem de erro:

# pkg-config --print-errors libffi

Provavelmente retornará uma mensagem como abaixo:

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


Nada muito diferente do que já recebemos até agora.

Bem, precisamos instalar o libffi do código-fonte agora? É isso? Não, ainda não! Há duas alternativas.

O pkg-config procura pelas dependências do instalador em uma variável. Sou do mundo Windows e (in)felizmente estou contaminado por ele, mas ele ajuda muito a esclarecer as coisas neste mundo chamado Linux.

Se estiver no Windows agora, abra o prompt de comando e digite o comando "echo %PATH%" e verá que aparecerá um monte de diretórios, principalmente do sistema.

Quando executamos um comando no Windows, ele procura nos diretórios citados em %PATH% pelo executável e, se o encontra, o executa. Se não o encontra, retorna a mensagem de erro: "patch.exe" não é reconhecido como um comando interno ou externo.

A mesma regra vale para o pkg-config. Ele possui uma variável chamada PKG_CONFIG_PATH onde, após receber a lista de dependências do programa que estamos compilando, ele procura por elas. Se as encontra, ele continua a compilação e não dá sinal de vida. Se não encontra, para imediatamente a compilação até instalarmos as dependências.

Mas o pkg-config é bonzinho! Sem ele, compilaríamos um programa e ele poderia não funcionar adequadamente e não saberíamos porque.

Podemos adicionar diretórios para que ele procure pelas dependências e pode ser que a encontre. Você pode ler o conteúdo da variável PKG_CONFIG_PATH usando o comando:

# echo $PKG_CONFIG_PATH

Provavelmente retornará uma tela vazia, porque a variável estará vazia.

Precisamos adicionar os diretórios padrões do pkg-config para que ele procure pelas dependências lá. Cada dependência, após a instalação, adiciona um arquivo chamado *.pc no computador, onde * é o nome da dependência procurada pelo pkg-config (no caso, libffi).

Elas são guardadas, por padrão, em dois diretórios:
  • /usr/local/lib/pkgconfig
  • /usr/lib64/pkgconfig/

NOTA: se você usa uma distribuição de 32 bits (x86), use /usr/lib no lugar de /usr/lib64.

Para adicioná-las à variável, use o comando:

# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig

Adicionamos $PKG_CONFIG_PATH: no início da variável caso ela não esteja vazia. Assim, mantemos todos os diretórios que já estão presentes nela, só adicionamos novos.

Usamos ":" para limitarmos os diretórios (no Windows, usamos ponto e vírgula).

Você pode procurar em todo / pelo possível arquivo [nome].pc com o comando:

# find / |grep libffi.pc

Onde libffi é substituído pelo nome repassado pelo pkg-config, EXATAMENTE o mesmo. Se encontrar alguma correspondência, adicione o diretório citado a variável PKG_CONFIG_PATH.

Tente compilar novamente o instalador com o comando ./configure e veja se a compilação ocorre com êxito.

Se mesmo assim não foi, há apenas uma resposta (previsível, por assim dizer): A dependência não está instalada.

Podemos tentar instala-la pelo amado yum (ou apt-get) com o comando:

# yum install libffi*
Linux: Como resolver problemas com o pkg-config
yum, nós te amamos!

No meu caso, após a instalação do libffi pelo yum, pude compilar o glib normalmente. Mas não são todos os casos que tiramos a sorte grande - na maioria das vezes não encontra nada.

Precisamos procurar pelo pacote faltando pela internet e então compila-lo pelo código-fonte (recomendo ler as instruções do autor de instalação, se disponíveis).

Pode ainda tentar uma última tentativa: instalar o pacote de desenvolvimento disponível no yum. Ele instala bibliotecas e dependências que pode ajudar a diminuir muita dor de cabeça, com o comando:

# yum groupinstall "Development Tools"

Se mesmo assim não for, procure na internet com pessoas com o mesmo problema que o seu, por que o problema pode ser específico da instalação do pacote. (Por isso que ler as instruções de instalação ou procurar na internet é importante!).

ERRO #2: 'pkg-config --modversion XXX' returned [...], but XXX [...] was found!
Linux: Como resolver problemas com o pkg-config
Este erro ocorre quando possuímos 2 versões de uma mesma dependência, e o pkg-config precisa que informemos qual versão vamos usar para continuar a instalação.

Este erro é comum no CentOS (deve ser comum em outras distribuições), já que por padrão ele acompanha o glib instalado uma versão mais antiga. Ele é importante para rodarmos o YUM e outros comandos do sistema, por isso o acompanha por padrão.

Mas acabamos instalando uma versão mais recente do glib para podermos rodar programas mais recentes; a antiga versão não é desinstalada (nem deve! Somente inutilizará o sistema - experiência própria. Mesmo com aviso do RPM, o removi de forma forçada e foi só reiniciar para ter que formatar meu sistema de mentirinha (máquina virtual): nem o yum funcionava mais! Mas é bom que aconteça estas coisas em casa: nunca deve acontecer em servidores!

Pelo menos pude matar minha curiosidade para ver o que acontecia e compartilhar com vocês. Se o RPM incomoda quando você for remover o pacote, provavelmente ele tem razão. Acredite nele!).

Tudo que precisamos fazer é dizer ao pkg-config que queremos usar a versão mais recente do glib, e não a que acompanha o sistema operacional (se alguém souber como atualizar a do sistema e usar apenas uma versão, comente nos comentários!).

Assim como existe a variável PKG_CONFIG_PATH (leia o ERRO #1), existe outra variável: LD_CONFIG_PATH. LD é a abreviação de Library Dir, ou diretório de bibliotecas. Todos os diretórios que adicionarmos aqui terão prioridade na compilação dos pacotes, por isso sua importância.

Geralmente usamos o mesmo diretório do PKG_CONFIG_PATH, com a diferença que voltamos um diretório (ou seja, removemos /pkgconfig do diretório).

# export LD_CONFIG_PATH=$LD_CONFIG_PATH:/usr/local/lib:/usr/lib64

NOTA: adicionamos $LD_CONFIG_PATH: no início da variável caso ela não esteja vazia. Assim, mantemos todos os diretórios que já estão presentes nela, só adicionamos novos.

Cada dependência, após instalada, adiciona um arquivo de referência nestes diretórios. Dê um "ls -la" e procure-o nos diretórios que adicionamos.

Se mesmo assim a mensagem continuar aparecendo, use o comando:

# rpm -qa glib*

Onde glib* deve ser substituído pelo nome da dependência, sem sua versão (removemos 2.0), apenas nome. Deverá retornar 2 resultados. Remova o que lhe for conveniente (e que não tenha dependências do sistema: a não ser que queira formatar seu sistema mais tarde!).

Você pode tentar procurar por atualizações no yum (yum update) para uma possível nova versão. Ou instalar o grupo Development Tools do yum, que possui diversos arquivos usados para compilar código-fonte e desenvolvimento, usando o comando:

# yum groupinstall "Development Tools"

Referência

THE SKIING CUBE. Compiling glib on CentOS - The skiing cube s.l, 2012 http://lkubaski.wordpress.com/2012/05/19/compiling-glib-on-centos/ (acessado em 28 de outubro de 2015)

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Instalação do Driver ATI Radeon XPRESS 200 no Ubuntu 16.04

Adicionando um atalho na área de trabalho a um compartilhamento de rede no Ubuntu

Solução para Ubuntu sem som

Instalação do OpenJDK e Oracle JDK 11 no Ubuntu e Debian

Traduzindo o Thunderbird para Português

Leitura recomendada

APLINUX Server

Criando, monitorando e terminando processos

Data, hora e timezone em sistemas GNU-Linux

Instalando o Kurumin 7 e outros em um pendrive

Entretenimento no Linux

  
Comentários
[1] Comentário enviado por prof em 13/11/2015 - 23:30h


Vlw , esse post me tirou do abismo,resolvi meu CentOS


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts