pkg-config flags são relativos

0
Estou tentando compilar as bmdtools com uma versão personalizada de .org / download / "> libav 11 que eu compilei sob ~/libav-11.8/build usando g ++ 4.8.4 no Ubuntu 14.04. O bmd usa o pkg-config para construir sinalizadores g ++ e, como a compilação falha na fase de vinculação, testei a saída do pkg-config da seguinte forma:

echo 'pkg-config --cflags --libs libavcodec libavformat libswscale libavutil'

qual yelds

-I/usr/local/include -pthread -L/usr/local/lib -lavformat -lavcodec
-ldl -lasound -lz -lwscale -lavutil -lm

Então, calculei que -I e -L flags não estão definidos para o local de criação personalizado. Definindo PKG_CONFIG_PATH=~/libav-11.8/build/lib/pkgconfig e executando novamente yelded

-Ibuild/include -pthread -Lbuild/lib ...<lib flags>

, o que seria correto se eu executasse o g ++ na pasta raiz da compilação. O pkg-config não deve resolver para um caminho absoluto em vez de um caminho relativo? Qual é a lógica por trás desse comportamento?

    
por Grasshopper 19.10.2016 / 18:37

1 resposta

2

Depois de ler Guia do Freedesktop para o pkg-config , percebi que o pkg-config não faz nada para validar se binários, bibliotecas ou caminhos são precisos. Ele apenas mostra o que está escrito nos arquivos Libs e Cflags dos arquivos .pc .

No meu caso, eles são criados pelo processo de compilação da libav e usam a variável prefix passada para configure .

Portanto, depois de recompilar a libav com prefix definido para um caminho absoluto, o pkg-config exibirá -I e -L sinalizadores apropriados para uso na compilação de outros projetos.

    
por 19.10.2016 / 19:42