pkg-config

編譯package的時候, 總是會看到--pkg-config=PKGCONFIG相關的選項。這邊就稍微研究一下pkg-config。 pkg-config這指令主要是用來搜尋安裝在系統上的libs,透過此指令列出lib的相關訊息。而libs的相關資訊則被記錄在.pc的檔案裡面。

附註:
在cross-compile的時候,編譯好的packages通常不會安裝在系統的預設目錄底下。通常都會放置在我們自訂的目錄。若是想讓pkg-config去搜尋我們放置的目錄,而不是預設的路徑。僅僅只需要修改PKG_CONFIG_PATH即可。
e.g.
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/cross/x64/usr/lib/pkg

這邊以一個foo.pc作為例子,其內容如下:
foo.pc:
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: foo
Description: The foo library
Version: 1.0.0
Cflags: -I${includedir}/foo
Libs: -L${libdir} -lfoo
相關指令用法如下:
# 列出 cflag 以及所需的libs (prefix=/usr 輸出則為-I/usr/include/foo -lfoo)
/usr/lib/pkgconfig$ pkg-config --cflags  --libs foo
-I/usr/local/include/foo  -L/usr/local/lib -lfoo
# 檢查lib版本
/usr/lib/pkgconfig$ pkg-config --libs "foo >= 1.9"
Requested 'foo >= 1.9' but version of foo is 1.0.0
# 測試lib是否存在 (0表示存在;)
/usr/lib/pkgconfig$ pkg-config --exists foo; echo $?
0
# 測試lib是否存在,並顯示錯誤訊息 (這對有編譯package的人可不陌生...)
/usr/lib/pkgconfig$ pkg-config --exists --print-errors abc
Package abc was not found in the pkg-config search path.
Perhaps you should add the directory containing `abc.pc'
to the PKG_CONFIG_PATH environment variable
No package 'abc' found

Reference

留言

這個網誌中的熱門文章

yocto recipe : (1) 撰寫 recipe

yocto recipe : (2) 撰寫 bbappend

yocto recipe : (3) 使用 External Source 來編譯軟體