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
に検索させないように、これらのパスを禁止するにはどうすればよいですか?
/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
に移動し、-lasound
(Libs:
フィールドにあります)を-foobar
に変更します。 $PKG_CONFIG_PATH
を設定して、もう一度お試しください:
> PKG_CONFIG_PATH=/opt/bs/pkg pkg-config --libs alsa
-foobar
Eureka、$PKG_CONFIG_PATH
は組み込みパスをオーバーライドしました...もちろん/opt/bs/pkg
を削除できます。