web-dev-qa-db-ja.com

PKG_CONFIG_PATH環境変数

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

70
MKJ

PKG_CONFIG_PATHは、pkg-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
66
devav2

最初の答えは技術的に十分に明確ではありません。 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が認識しているディレクトリにある必要があります。

39
Ian Martin

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です。

35
GrandAdmiral

あなたは、ソフトウェアの一部を構築しようとしています。ウィジェットとしましょう。 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ファイルを手動で作成することは可能ですが、それを正しくすることは難しく、特定のライブラリに非常に固有です。

6
Alan De Smet

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

インストールするソフトウェアは、いくつかのライブラリーやヘッダーに依存する場合があり(通常はそうします)、システムは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>

詳細については、 here および here をご覧ください。

5
clobrano

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/
5
possumkeys

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

1
dobey

https://github.com/confluentinc/confluent-kafka-go を使用している人

Librdkafkaのインストールに従ってください

  1. git clone https://github.com/edenhill/librdkafka.git
  2. cd librdkafka
  3. ./configure --prefix/usr
  4. make
  5. Sudo make install

これでgo install/go run go buildを使用できます

0
shotu

axel の最新バージョンをインストールしようとしていて、./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変数の変更とは何の関係もありませんでした。

0
Shayan