pkg-config的作用是列出系统中库的基本信息,例如,查询pcre库的相关信息:

$ pkg-config --libs libpcre2-8
-L/usr/local/pcre2-10.31/lib -lpcre2-8

常用选项为:

  • --list-all:列出所有已安装的共享库。
  • --cflags:列出指定共享库的预处理和编译flag。
  • --libs:列出指定共享库的链接flag。
$ pkg-config --list-all # 列出所有的库地址
lua5.1-rrd       Lua rrd - Lua rrd engine
tic              tic - ncurses 6.0 add-on library
lua51-c++        Lua - Lua language engine
lua5.1-bitop     Lua bitop - Lua bitop engine
ncurses          ncurses - ncurses 6.0 library
lua5.2-bitop     Lua bitop - Lua bitop engine
menu             menu - ncurses 6.0 add-on library
python-3.5m      Python - Python library
systemd          systemd - systemd System and Service Manager
...

$ pkg-config --cflags --libs libpcre2-8 # 找出pcre库相关的文件信息
-I/usr/local/pcre2-10.31/include -L/usr/local/pcre2-10.31/lib -lpcre2-8

原理

和系统的环境变量PATH一样,pkg-config的也有一个环境变量PKG_CONFIG_PATH用于表示库文件的查询路径,不过和PATH不一样的是,pkg-config中的路径并不直接是库的路径,而是库安装完后的.pc文件的路径。

一个系统库安装完成之后会生成*.pc文件,位于库安装目录下的lib/pkgconfig下,例如pcre库:

$ tree /usr/local/pcre/lib/
/usr/local/pcre/lib/
├── libpcre2-8.a
├── libpcre2-8.la
├── libpcre2-8.so -> libpcre2-8.so.0.7.0
├── libpcre2-8.so.0 -> libpcre2-8.so.0.7.0
├── libpcre2-8.so.0.7.0
├── libpcre2-posix.a
├── libpcre2-posix.la
├── libpcre2-posix.so -> libpcre2-posix.so.2.0.0
├── libpcre2-posix.so.2 -> libpcre2-posix.so.2.0.0
├── libpcre2-posix.so.2.0.0
└── pkgconfig # pc文件路径
    ├── libpcre2-8.pc
    └── libpcre2-posix.pc

1 directory, 12 files

*pc的路径加到PKG_CONFIG_PATH即可:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$PCRE_HOME/lib/pkgconfig
最后修改:2018 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏