PKG_CONFIG_PATH環境変数


74

非標準のプレフィックスでソフトウェアをインストールした場合は、PKG_CONFIG_PATH環境変数の調整を検討してください。これは何を意味するのでしょうか ?


1
「これは何で、どのように使用しますか?」のようなPKG_CONFIG_PATH環境変数の適切な使用例について尋ねることができた以外は、ほぼ同じ方法でこれを尋ねます。あなたが得た答えはあなたにこれを伝えようとしていたようです。./configure中に依存関係の検出に失敗すると、これが頻繁に表示されます。
ダグラスG.アレン14年

回答:


68

PKG_CONFIG_PATHpkg-config.pcファイルを検索する追加のパスを指定する環境変数です。

この変数は、pkg-configのデフォルトの検索パスを増やすために使用されます。典型的なUnixシステムでは、ディレクトリ/usr/lib/pkgconfigとを検索し/usr/share/pkgconfigます。これは通常、システムにインストールされたモジュールをカバーします。ただし、一部のローカルモジュールは、などの異なるプレフィックスにインストールされる場合があります/usr/local。その場合、pkg-configが.pcファイルを見つけることができるように、検索パスを追加する必要があります。

このpkg-configプログラムは、システムにインストールされているライブラリに関する情報を取得するために使用されます。の主な用途はpkg-config、プログラムをコンパイルしてライブラリにリンクするために必要な詳細を提供することです。このメタデータはpkg-configファイルに保存されます。これらのファイルには接尾辞.pcが付いており、pkg-configツールが認識している特定の場所にあります。

PKG_CONFIG_PATH値を確認するには、次のコマンドを使用します。

echo $PKG_CONFIG_PATH

PKG_CONFIG_PATH値を設定するには:

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

または

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

@NathanKiddリマインダーをありがとう、コメントは削除されました。とにかく、元のエラーは、元の作者以外の編集者が編集した結果であるようです。
ティモシー区

@remramはエラーが修正されたように見えますが、編集履歴を注意深く調べないとコメントが混乱します。現在の正確性に満足していることを確認し、コメントを削除してください。(そして、私は私のものを削除します。)
ネイサンキッド

@ devav2の両方のエクスポートコマンドは問題を修正しません
Shayan

38

最初の答えは技術的に十分に明確ではありません。manページから(ターミナルを開き、を入力しますman pkg-config):

pkg-config特別なメタデータファイルからパッケージに関する情報を取得します。これらのファイルはパッケージにちなんで名前が付けられ、.pc拡張子が付いています。ほとんどのシステムでは、 pkg-config 中に見え/usr/lib/pkgconfig/usr/share/pkgconfig/usr/local/lib/pkgconfigおよび/usr/local/share/pkgconfigこれらのファイルのため。さらに、PKG_CONFIG_PATH環境変数で指定されたディレクトリのコロン区切り(Windowsではセミコロン区切り)リストを調べます。

したがって、pkg-configプログラムはPKG_CONFIG_PATHディレクトリにありません。ただし、ライブラリをインストールする場合、automakeスクリプトで使用する情報にアクセスするには、ライブラリpkg-configが認識しているディレクトリにある必要があります。


キーフレーズは「ほとんどのシステム上」にあるようです。たとえば、私のDebianでは、/usr/local/lib/x86_64-linux-gnu無料の(空のPKG_CONFIG_PATH)自動検索場所として、そして実際には、.pcGTK +などを含む多くのファイルがスローされます。-そこに住んでいます。この理由は、ここで概説するように、パッケージのマルチアーキテクチャ可用性を同時に有効にするためです:askubuntu.com/questions/449348/…–
underscore_d

(これ以上編集できません)このページのさらに下の回答で@GrandAdmiralは、pkg-configシステムで検索するデフォルトのパスを確認する方法を示しました:askubuntu.com/a/373217/436580
underscore_d

35

pkg-config(バージョン0.24以降)がデフォルトでインストール済みライブラリを検索する場所を確認するには、次のコマンドを使用します。

pkg-config --variable pc_path pkg-config

そのパスを変更するには、PKG_CONFIG_PATH環境変数を設定します。manファイルの状態PKG_CONFIG_PATHは次のとおりです。

.pcファイルを検索するためのディレクトリのコロン区切り(Windowsではセミコロン区切り)リスト。デフォルトのディレクトリは、パスを検索した後に常に検索されます。デフォルトはlibdir / pkgconfig:datadir / pkgconfigです。ここで、libdirはpkg-configのlibdir、datadirはpkg-configがインストールされたdatadirです。


3
便利なスクリプトは次のようになりますecho $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
-albfan

5
これは私を助けた素晴らしい答えです。ただし、明確にするために、「修正する」のではなく「そのパスに追加する」と言う必要があります。空白があり、PKG_CONFIG_PATHデフォルトの検索ディレクトリがあり、空白以外の値を設定してもデフォルトはクリアされません。
underscore_d

この回答は本当に役に立ちました、ありがとう!私はpkg-configのデフォルトの検索パスがLinuxbrewでインストールされているため、デフォルトのパスが存在しないので、それを把握しようとしていました。ありがとう!
mxplusb

6

あなたは、ソフトウェアの一部を構築しようとしています。ウィジェットとしましょう。Widgetは、議論のために別のライブラリlibcogに依存しています。ウィジェットのビルドプロセス(おそらくconfigureスクリプト)は、pkg-configを使用してlibcogの使用方法を決定しています。pkg-configはlibcogについて何も知りません。

libcogがインストールされていない場合、それが問題です。libcogの標準インストールで問題が修正される可能性は十分にあります。システムによっては、追加の「開発者」バージョンのパッケージをインストールする必要がある場合があります。多くの場合、末尾に「-devel」または「-dev」があるため、「libcog」をインストールする場合は、「libcog-devel」もインストールする必要があります。

libcogがインストールされている場合、pkg-configが見つけられるような方法でインストールされていない可能性があります。おそらくシステムのどこかにlibcog.pcファイルがあります。議論のため、/ opt / cog / lib / pkgconfig / libcog.pcにあります。その場合、libcog.pcを保持するディレクトリにPKG_CONFIG_PATHを設定することで、pkg-configに通知できます。ボーンシェルなどで、次のような

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/

それが完了したら、失敗したコマンドを再実行するとうまくいきます。

ライブラリとヘッダーファイルを含むlibcogがインストールされていて、libcog.pcファイルがない場合は、うまくいきません。おそらく、libcogの標準インストールには情報が含まれています。そうでない場合、Widgetはそれに依存しません。最初にlibcogの再インストールを調査します。libcog.pcファイルを手動で作成することは可能ですが、それを正しくすることは難しく、特定のライブラリに非常に固有です。


4
ただし、PKG_CONFIG_PATHが定義されている場合はどうなりますか?
NoBugs

1
@NoBugs良いキャッチ、私は答えを編集しました(数年後!)代わりに追加します。
ジョーモルト

5

64ビットシステムのマンページを見て、少し混乱しました。一行で言った:

pkg-configは、特別なメタデータファイルからパッケージに関する情報を取得します。これらのファイルには、拡張子.pcが付いたパッケージ名が付けられます。デフォルトでは、pkg-configはこれらのファイルのディレクトリprefix / lib / pkgconfigを検索します。また、環境変数PKG_CONFIG_PATHで指定されたディレクトリのコロン区切り(Windowsではセミコロン区切り)リストも調べます。

lib / pkgconfigディレクトリを常に検索すると想定していました。ディレクトリ自体が判明します。私の場合、hello world gtkチュートリアルをコンパイルしようとしていました。必要なファイルを見つけます。

locate gtk | grep '\.pc'

結果の中には:

/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc

最後にエクスポートを行うことでした。

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/

1
+1 manは、最新のマルチアーキテクチャ対応システムでページがどのように単純化されすぎているかを指摘するためのものです。Debian 8 x86ではpkg-config、x86_64フォルダーを既に(何も含まずにPKG_CONFIG_PATH)見ているため、しばらく混乱していました。これがどのように組み込まれたかはわかりませんが、@ GrandAdmiralによって示されるこれをプローブするコマンドライン--variable pc_pathは、それがpkg-config自身のパッケージに設定されている(なんとか!)によって制御されていることを示しています。
underscore_d

5

ほとんどの答えには必要以上の情報が含まれているように思えます。

インストールするソフトウェアは、いくつかのライブラリーやヘッダーに依存する可能性があり(通常はそうします)、システムはpkg-configを使用してそれらを見つけます。

つまりpkg-config、事前に定義された(デフォルトの)システムのディレクトリでこのファイルを探します。これらのフォルダーは「プレフィックス」です。たとえば、接頭辞を持つライブラリ/usr/localにはヘッダーが含まれることが期待され/usr/local/include、ライブラリ自体はになります/usr/local/lib。 ただし、pkg-configは、環境変数PKG_CONFIG_PATHにリストされているディレクトリでもライブラリを探します。

次に、フォルダのデフォルトリスト外にソフトウェアをインストールする場合、リストを「調整」する必要がありました。つまり、ディレクトリをPKG_CONFIG_PATHに追加します

$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>

詳細については、こちらこちらをご覧ください


PKG_CONFIG_PATH(指定)ファイルのみ を検索する追加のディレクトリを指定します。ライブラリ検索ディレクトリなどのpkg固有のものには影響しません。yourPkg.pcpkg-config
underscore_d

1

これは、ソースから何かを構築しようとしており、必要な依存関係をすべて見つけることができないことを意味します。pkg-configそれは、これらのライブラリの開発ファイルを見つけるために使用するスクリプトは、このメッセージを出力します。


0

私は、最新バージョンのインストールしようとしていたアクセルを、私は走った./configureと私はこれを得ました:

configure: error: Package requirements (openssl) were not met:

No package 'openssl' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables SSL_CFLAGS
and SSL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

だから私は試しました:

$ pkg-config --cflags openssl

そして私は得た:

Package openssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `openssl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'openssl' found

明らかなように、opensslがインストールされていました(sudo apt-get install openssl)しかし、上の出力では、「パッケージ 'openssl'が見つかりません」と表示されています。だから私がしたことを確認するために:

find / -type f -name "*.pc" |& grep -iv permission | grep openssl

確かに他のパッケージが必要なので、少しグーグルで調べて、このパッケージをインストールする必要があることがわかりました。

sudo apt-get install libssl-dev

そして、これはすべてpkg-configパスenv変数の変更とは何の関係もありませんでした。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.