pkg-config

eiSouthBoy發表於2024-06-23

一、pkg-config

pkg-config是一個命令列工具,主要用於幫助開發者在編譯依賴於特定庫的軟體時,自動獲取和設定正確的編譯器選項和連結器選項。它的主要作用在於簡化編譯過程,確保程式能夠正確地找到所需的標頭檔案和庫檔案,尤其是在庫檔案可能安裝在非標準位置的情況下。

pkg-config版本查詢:

有時候會看到諸如此類的編譯命令:

gcc source.c -o source `pkg-config --libs --cflags glib-2.0`

那麼

`pkg-config --libs --cflags glib-2.0`

得到的結果是什麼呢?其結果又是如何得到的呢?這樣做的好處是什麼呢?

二、pkg-config已支援的庫

若使用者安裝了軟體,則可以透過pkg-config檢視:pkg-config --list-all

三、庫的*.pc

pkg-config查詢對應庫的*.pc檔案,例如glib-2.0.pc。該檔案內宣告瞭標頭檔案目錄、庫檔案目錄以及庫名稱。例如檢視該檔案的內容,驗證下

/usr/lib/x86_64-linux-gnu/pkgconfig/glib-2.0.pc

prefix=/usr
libdir=${prefix}/lib/x86_64-linux-gnu
includedir=${prefix}/include

bindir=${prefix}/bin
glib_genmarshal=${bindir}/glib-genmarshal
gobject_query=${bindir}/gobject-query
glib_mkenums=${bindir}/glib-mkenums

Name: GLib
Description: C Utility Library
Version: 2.64.6
Requires.private: libpcre >=  8.31
Libs: -L${libdir} -lglib-2.0
Libs.private: -pthread
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include

查詢glib-2.0庫的標頭檔案目錄和庫檔案目錄以及庫名稱:pkg-config --libs --cflags glib-2.0

標頭檔案目錄:-I/usr/include/glib-2.0
庫檔案目錄:-I/usr/lib/x86_64-linux-gnu/glib-2.0/include
庫名稱:-lglib-2.0

回到最開始的問題,我們編譯source.c檔案需要使用glib-2.0庫檔案,使用這個庫檔案需要找對應的標頭檔案目錄和庫檔案目錄,有兩種方式可以找到。

  • 第一種方式

透過這個dpkg -L 命令去找庫的標頭檔案目錄和庫檔案目錄:sudo dpkg -L libglib2.0-dev

  • 第二種方式

透過pkg-config命令去查詢,這種方法更加簡單、方便。