web-dev-qa-db-ja.com

「pkg-config --variable pc_path pkg-config」にリストされているいくつかのライブラリパスを除外するにはどうすればよいですか?

Ubuntu 14.04を12.04からアップグレードして、dist-upgradeを作成しています。私は過去にffmpeg、libglibなどの多くの手動インストールを行いました。私は今素敵なカスタムディストリビューションを持っています、それはうまくいきますが、アプリケーションをコンパイルしようとしているときに問題があります。これは、ソースコードから手動でインストールされたパッケージとネイティブディストリビューションライブラリの間のライブラリの競合に起因します。ある人が/usr/localの名前を変更するようにアドバイスしましたが、次の再起動時に起動に失敗しました.

pkg-configによって追加されたディレクトリを探すとき

  pkg-config --variable pc_path pkg-config

リストする

 /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

/usr/local/lib...でパスを検索したくない

pkg-configに検索させないように、これらのパスを禁止するにはどうすればよいですか?

6
kenn

/usr/localのものは通常、/usrのものに取って代わります。そのため、「素敵なカスタムディストリビューション」を作成するためにライブラリをインストールする理由について少し混乱していますが、それらに対してコンパイルしたくないのです。 。これらは、システムが実際に使用するライブラリです。

とにかく、man pkg-configは基本検索パスを要求します。

はlibdir/pkgconfig:datadir/pkgconfigで、libdirはpkg-configのlibdirで、datadirはpkg-configのdatadirですインストールされたとき

これはそれらが組み込まれていることを意味します。ubuntuではFedoraとは異なります。前者は長くて包括的ですが、後者は短くて排他的です。 Fedoraでは、$PKG_CONFIG_PATHを設定して/usr/localを含める必要があります。

$PKG_CONFIG_PATHのパスがチェックされるため最初に、次のように設定できます。

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

これらが組み込みパスの最後にあるという事実は重要ではありません。チェックが何も見つからずにそこに到達した場合、何も見つかりません。


これがどのように機能するかを示すために、一時ディレクトリ/opt/bs/pkgを作成し、デフォルトパスのディレクトリの1つから.pcファイルをコピーします(例:alsa.pc)。最初のチェック。

> pkg-config --libs alsa
-lasound

次に/opt/bs/pkg/alsa.pcに移動し、-lasoundLibs:フィールドにあります)を-foobarに変更します。 $PKG_CONFIG_PATHを設定して、もう一度お試しください:

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

Eureka、$PKG_CONFIG_PATHは組み込みパスをオーバーライドしました...もちろん/opt/bs/pkgを削除できます。

3
goldilocks