pkg-config学習

6022 ワード

転自:pkg-configの使い方
pkg-config使用
 #pkg-config   opencv # add open CV unix { CONFIG += link_pkgconfig PKGCONFIG += opencv }

pkg-config  gccのCFLAGSパラメータの表示
$
pkg-config
--libs --cflags opencv
次の情報が表示されます.
-I/usr/include/opencv -lcxcore -lcv -lhighgui -lcvaux
皆さん、これは私たちがgccで接続をコンパイルするときのCFLAGSのパラメータではないでしょうか.
したがって、あるライブラリをコンパイルして接続する必要がある場合は、上の行をgccのパラメータに追加するだけです.
これもconfigureの役割で、必要なパッケージをチェックし、対応する情報を生成します.
それは
pkg-configはどこでこれらの情報を知っていますか?パッケージ名xxx.pcというファイルから見つかりました.上記の例ではopencv.pcというファイルから調べられています.
それは
pkg-configはどうしてopencv.pcというファイルを知っていますか?
次に見てみましょう
pkg-configはどのように働いていますか.
デフォルトでは、pkg-configはまずprefix/lib/pkgconfig/で関連パッケージ(例えばopencv)に対応する対応するファイル(opencv.pc)を検索します.linux上の上記のパス名は/usr/lib/pkconfig/です.見つからなかったらPKGにもCONFIG_PATHという環境変数が指定した経路を探しに行きます.見つからない場合は、次のようなエラーが発生します.
Package opencv was not found in the
pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
#    PKG_CONFIG_PATH   
yhzhao@yhzhao:~$ echo $PKG_CONFIG_PATH
/home/yhzhao/slam_ws/devel/lib/pkgconfig:/home/yhzhao/slam_ws/devel/lib/x86_64-linux-gnu/pkgconfig:
/home/yhzhao/hl_ws/devel/lib/x86_64-linux-gnu/pkgconfig:/home/yhzhao/catkin_ws/devel/lib/x86_64-linux-gnu/pkgconfig:
/opt/ros/indigo/lib/x86_64-linux-gnu/pkgconfig:/home/yhzhao/hl_ws/devel/lib/pkgconfig:
/home/yhzhao/catkin_ws/devel/lib/pkgconfig:/opt/ros/indigo/lib/pkgconfig

 yhzhao@yhzhao:~$ 

環境変数PKG_の設定CONFIG_PATH法としては、以下のようなものが挙げられる.
export PKG_CONFIG_PATH=/cv/lib:$PKG_CONFIG_PATH
1 pkg-configプログラムは何に使いますか?
        簡単に言えば,ユーザに対応するライブラリのパス,バージョン番号などの情報をプログラムに提供するプログラムである.典型的には、ライブラリとして使用されるコンパイルと接続です.
pkg-config --list-all               。
   $pkg-config --list-all |grep gtk (       gtk)

pkg-configは、バージョン情報、コンパイル、接続に必要なパラメータなど、ライブラリのさまざまな必要な情報を取得する.pcメタデータファイルをライブラリに提供する必要があります.これらの情報は、pkg-configが提供するパラメータ(例えば、cflags、--libs)によって、コンパイラおよびコネクタで直接抽出することができる.
デフォルトでは、pkg-configをサポートするライブラリごとに対応する.pcファイルは、インストール後、ディレクトリ/usr/lib/pkgconfigディレクトリの下にあります.
環境変数PKG_CONFIG_PATHは.pcファイルの検索パスを設定するために使用され、pkg-configは設定パスの前後順に検索される.これにより、ライブラリのヘッダファイルの検索パスの設定は、実際には.pcファイルの検索パスの設定になります.
2 pkg-config機能は一般的に、同じライブラリを使用しても、異なるユーザーがインストール時に異なるディレクトリにインストールされる場合があります.このようにコンパイル時に-Iパラメータを使用してincludeパスを指定し、接続時に-Lパラメータを使用してlibライブラリのパスを指定すると、コンパイル、接続の不一致が発生し、同じプログラムが1台のマシンcopyから別のマシンに移行すると問題が発生する可能性があります.pkg-configは、コンパイル接続インタフェースの不統一問題を解決するためのツールです.
その基本思想:事前にライブラリの各種必要情報を.pcファイルに保存し、必要に応じてパラメータ(--cflags,--libs)を使用して、必要な情報を抽出してコンパイルと接続のために使用することができる.これにより、ライブラリファイルがどこにインストールされているかにかかわらず、ライブラリに対応する.pcファイルを介して正確に位置決めでき、同じコンパイルと接続コマンドを使用して、コンパイルと接続インタフェースを統一することができます.
主な機能は、<1>ライブラリのバージョン番号をチェックすることです.必要なライブラリのバージョンが要求を満たしていない場合は、エラーバージョンのライブラリファイルに接続しないようにエラーメッセージを印刷します.<2>マクロ定義、ヘッダファイルのパスなどの前処理パラメータをコンパイルします.<3>ライブラリとその依存する他のライブラリの場所、ファイル名、接続パラメータなどのコンパイルパラメータを取得します.<4>依存する他のライブラリの設定を自動的に追加します.
3 gtk+-2.0の.pcファイルの内容例
prefix=/usr

exec_prefix=/usr

libdir=/usr/lib

includedir=/usr/include

target=x11


gtk_binary_version=2.4.0

gtk_host=i386-redhat-linux-gnu


Name: GTK+

Description: GIMP Tool Kit (${target} target)

Version: 2.6.7

Requires: gdk-${target}-2.0 atk

Libs: -L${libdir} -lgtk-${target}-2.0

Cflags: -I${includedir}/gtk-2.0

gtk+のライブラリを使用してプログラムをコンパイルする場合は、次のようにします.
$gcc -c program.c -o program `pkg-config "gtk+-2.0>2.0.0" --cflags --libs`

ここで、--cflagsパラメータはコンパイルに必要なオプションを抽出し、--libsパラメータは接続時のオプションを抽出します.上のステップは、次の2つのステップに分けることもできます.
$gcc -c program.c `pkg-config --cflags "gtk+-2.0>2.0.0"`

$gcc -o program program.o `pkg-config --libs "gtk+-2.0>2.0.0"`

4環境変数PKG_CONFIG_PATH
使用するライブラリをインストールした後、Glibなど、glib 2.0.pcなどの.pcファイルを/usr/lib/pkgconfigディレクトリにコピーすること、環境変数PKG_を設定することCONFIG_PATHはglib-2.0.pcファイルの検索パスを追加します.
特に、古いライブラリの代わりに新しいインストールライブラリを完全に使用しない場合は、環境ウィンドウの設定が現在のターミナルウィンドウにのみ有効であるため、環境変数を使用するとより良い選択になる可能性があります.
環境変数を使用する方法は、PKG_を変更するだけです.CONFIG_PATHとLD_LIBRARY_PATH変数.LD_LIBRARY_PATH変数は主に新しいインストールライブラリの検索パスを追加します.
新しいGlibライブラリが/usr/local/glib-2.0/libにインストールされているように、ファイルset_を編集できます.glib-2.0:
export PKG_CONFIG_PATH=/usr/local/lib/glib-2.0/lib/pkgconfig:$PKG_CONFIG_PATH

export LD_LIBRARY_PATH=/usr/local/lib/glib-2.0/lib:$LD_LIBRARY_PATH

使用するたびに、sourceの下でいいです.
$source set_glib-2.0

5その他のconfig
$ls /usr/bin/*config

pkg-config gtkのインストール状況アドレスを検索する4つのコマンドがあります:PKG_CONFIG_PATHとPKG_CONFIGのパス設定の問題
     $pkg-config --modversion gtk+    (  1.2.x  )

     $pkg-config --modversion gtk+-2.0  (   2.x   )

     $pkg-config --version (  pkg-config   )

     $pkg-config --list-all |grep gtk (       gtk)

       pkg-config --modversion gtk+-2.0,     xproto.pc  ,             PKG_CONFIG_PATH ,     ,    /usr/share/pkgconfig ,         :
     export PKG_CONFIG=/usr/local/bin/pkg-config
     export PKG_CONFIG_PATH=/usr/share/pkgconfig:/usr/lib/pkgconfig
       :        ':'   ,   ',',    ';'。       。


参考:1.ld.so.confファイルとPKG_CONFIG_PATH変数、http://www.91linux.com/html/article/program/cpp/20071207/8934.html 2.Makefile好助手:pkgconfig,http://blog.mcuol.com/User/AT91RM9200/Article/7457_1.html 3.pkg-config使用、http://blog.chinaunix.net/u/12467/showart_246860.html