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
留言
張貼留言