pkg config介紹與使用

2021-08-18 13:11:57 字數 2103 閱讀 8626

linux、c/c++、編譯鏈結
摘 要:

一般來說,如果庫的標頭檔案不在 /usr/include 目錄中,那麼在編譯的時候需要用 -i 引數指定其路徑。由於同乙個庫在不同系統上可能位於不同的目錄下,使用者安裝庫的時候也可以將庫安裝在不同的目錄下,所以即使使用同乙個庫,由於庫的路徑的不同,造成了用 -i 引數指定的標頭檔案的路徑也可能不同,其結果就是造成了編譯命令介面的不統一。如果使用-l 引數,也會造成連線介面的不統一。編譯和連線介面不統一會為庫的使用帶來麻煩。

為了解決編譯和連線介面不統一的問題,人們找到了一些解決辦法。其基本思想就是:事先把庫的位置資訊等儲存起來,需要的時候再通過特定的工具將其中有用的資訊提取出來供編譯和連線使用。這樣,就可以做到編譯和連線介面的一致性。其中,目前最為常用的庫資訊提取工具就是下面介紹的pkg-config。

2.1 pkg-config提供的功能

pkg-config提供了以下幾個功能:

1.檢查庫的版本號。如果所需要的庫的版本不滿足要求,它會列印出錯誤資訊,避免鏈結錯誤版本的庫檔案。

2. 獲得編譯預處理引數,如巨集定義,標頭檔案的位置。

3.獲得鏈結引數,如庫及依賴的其它庫的位置,檔名及其它一些連線引數。

4.自動加入所依賴的其它庫的設定。

2.2 pkg-config實現的原理

pkg-config是通過庫提供的乙個.pc檔案獲得庫的各種必要資訊的,包括版本資訊、編譯和連線需要的引數等。這些資訊可以通過pkg-config提供的引數單獨提取出來直接供編譯器和聯結器使用。pkg-config會尋找預設位置/usr/lib/pkgconfig(32位) || /usr/lib64/pkgconfig(64位)的.pc檔案或者根據變數pkg_config_path定義的位置來尋找.pc檔案,根據.pc檔案獲取庫的資訊。

乙個.pc檔案的例子,檔名為openssl.pc:

requires: libcrypto2.3 pkg-config使用方法

使用pkg-config的–cflags引數可以給出在編譯時所需要的選項,–libs引數可以給出連線時的選項。例如,假設乙個sample.c的程式用到了openssl庫,就可以這樣編譯:

$ gcc -c `pkg-config "openssl > 1.0.0" --cflags openssl` sample.c
然後這樣連線:

$ gcc sample.o -o sample `pkg-config "openssl > 1.0.0"  --libs openssl`
$

gccsample.c

-osample

`pkg

-config

"openssl > 1.0

.0"--

cflags--

libs

openssl`

2.4 需要注意的地方

pkg-config只是解決了編譯和鏈結階段庫路徑的問題,執行時路徑仍然需要另外的操作。

設定庫檔案的搜尋路徑有下列兩種方式,可任選其一使用:

1.在環境變數ld_library_path中指明庫的搜尋路徑。

2.在/etc/ld.so.conf檔案中新增庫的搜尋路徑。

後者需要用root許可權執行/sbin/ldconfig,才能將庫的路徑更新到/etc/ld.so.cache中。

可以看到:由於使用了pkg-config工具來獲得庫的選項,所以不論庫安裝在什麼目錄下,都可以使用相同的編譯和連線命令,帶來了編譯和連線介面的統一。

pkg config使用指南

pkg config原理及用法 原文 我們在用第三方庫的時候,經常會用到pkg config這個東西來編譯程式。那pkg config究竟是什麼呢?本博文簡單地說一下。對於乙個比較大第三方庫,其標頭檔案和庫檔案的數量是比較多的。如果我們乙個個手動地寫,那將是相當麻煩的。所以,pkg config就應...

關於pkg config的使用示例

1.gcc命令列裡的使用 gcc g main.c o main pkg config gl glu glut cflags libs 2.在configure.ac中的使用 pkg config path usr local 設定pkg config的檢索路徑 pkg check modules ...

Linux中 pkg config 命令的使用

ubuntu作業系統。pkg config 此命令用來返回已安裝庫的元資訊 庫路徑 版本號等等 pkg config命令會到定義好的環境變數pkg config path目錄中找對應庫的.pc檔案,從裡面讀出相關資訊。使用格式 pkg config 命令選項 庫列表 modversion 如果庫列表...