Como posso excluir alguns caminhos de bibliotecas listados em “pkg-config --variable pc_path pkg-config”?

6

Eu tenho o Ubuntu 14.04 atualizado a partir do 12.04 fazendo dist-upgrades. Eu fiz muitas instalações manuais, como ffmpeg, libglib e assim por diante, no passado. Eu tenho uma boa distribuição personalizada agora, funciona bem, mas eu tenho problemas ao tentar compilar aplicativos. Ele provém de conflitos de bibliotecas entre pacotes instalados manualmente a partir do código-fonte e de bibliotecas de distribuição nativas. Um cara me aconselhou a renomear o /usr/local , mas a inicialização falhou na próxima reinicialização.

Quando procuro por diretórios adicionados por pkg-config com

  pkg-config --variable pc_path pkg-config

lista

 /usr/local/lib/i386-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig

Eu não quero procurar por caminhos em /usr/local/lib...

Como posso proibir esses caminhos de não deixar pkg-config procurar?

    
por kenn 17.07.2014 / 14:58

1 resposta

3

Coisas em /usr/local geralmente substituem o material em /usr , então estou um pouco confuso sobre o porquê de você instalar bibliotecas lá para ter uma "boa distro personalizada", mas então não quer compilar com elas. Essas são as bibliotecas que o sistema usará para usar.

De qualquer forma, man pkg-config reivindica o caminho de pesquisa de base:

is libdir/pkgconfig:datadir/pkgconfig where libdir is the libdir for pkg-config and datadir is the datadir for pkg-config when it was installed.

Isto implica que eles são compilados. Eu percebo que é diferente no Ubuntu do que no fedora - o primeiro é longo e inclusivo, enquanto o último é curto e exclusivo; no fedora eu tenho que definir um $PKG_CONFIG_PATH para incluir /usr/local .

Como os caminhos em $PKG_CONFIG_PATH são verificados primeiro , você pode definir:

PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig

O fato de estarem no final dos caminhos embutidos não importará; se o cheque chegar lá sem encontrar nada, não há nada a ser encontrado.

Para demonstrar como isso funciona, crie um diretório temporário /opt/bs/pkg e copie um arquivo .pc de um dos diretórios no caminho padrão para ele - por exemplo, alsa.pc . Primeiro cheque;

> pkg-config --libs alsa
-lasound

Agora, vá para /opt/bs/pkg/alsa.pc e altere -lasound (está no campo Libs: ) para -foobar . Defina $PKG_CONFIG_PATH e tente novamente:

> PKG_CONFIG_PATH=/opt/bs/pkg pkg-config --libs alsa
-foobar

Eureka, $PKG_CONFIG_PATH anulou os caminhos incorporados ... você pode excluir /opt/bs/pkg , é claro.

    
por 17.07.2014 / 15:37