pkg-config フラグは相対的です。

pkg-config フラグは相対的です。

コンパイルしようとしています。骨密度ツールカスタマイズされたバージョンでlibav 11~/libav-11.8/buildUbuntu 14.04でg ++ 4.8.4を使用してコンパイルしました。 bmdはg ++フラグでpkg-configを使用して構築されました。リンクフェーズでコンパイルが失敗したため、次のようにpkg-config出力をテストしました。

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

これは生産します

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

そこでカスタムビルド位置に設定されていない位置を計算して表示して-Iおきました。-L設定PKG_CONFIG_PATH=~/libav-11.8/build/lib/pkgconfigして再実行すると生成されます。

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

ビルドルートフォルダでg ++を実行すると、これは正しいです。 pkg-configは相対パスではなく絶対パスをチェックしてはいけませんか?この行動の根拠は何ですか?

答え1

読んだ後Freedesktop パッケージ構成ガイド私はpkg-configがバイナリ、ライブラリ、またはパスが正しいことを確認するために何もしなかったことに気づきました。ファイルにLibs書き込まれたCflags内容だけを吐き出します.pc

prefix私の場合、libavのコンパイルプロセスによって生成されますconfigure

prefixしたがって、絶対パスに設定されたlibavを再コンパイルした後、pkg-configは他のプロジェクトのコンパイルに使用するのに適したフラグを出力します-I-L

関連情報