pkg-config的用途:
大家應該都知道用第三方庫,就少不了要使用到第三方的頭文件和庫文件。我們在編譯、鏈接的時候,必須要指定這些頭文件和庫文件的位置。
對於一個比較大第三方庫,其頭文件和庫文件的數量是比較多的。如果我們一個個手動地寫,那將是相當麻煩的。所以,pkg-config就應運而生了。pkg-config能夠把這些頭文件和庫文件的位置指出來,給編譯器使用。
*.pc文件的編寫:
首先要明確一點,因為pkg-config也只是一個命令,所以不是你安裝了一個第三方的庫,pkg-config就能知道第三方庫的頭文件和庫文件所在的位置。pkg-config命令是通過查詢XXX.pc文件而知道這些的。我們所需要做的是,寫一個屬於自己的庫的.pc文件。
如下展示hyperscan開源庫中的libhs.pc文件的撰寫:
1 [root@localhost pkgconfig]# ls 2 libhs.pc 3 [root@localhost pkgconfig]# 4 [root@localhost pkgconfig]# 5 [root@localhost pkgconfig]# cat libhs.pc 6 prefix=/usr/local 7 exec_prefix=/usr/local 8 libdir=/usr/local/lib 9 includedir=/usr/local/include 10 11 Name: libhs 12 Description: Intel(R) Hyperscan Library 13 Version: 4.5.0 14 Libs: -L${libdir} -lhs 15 Libs.private: -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc 16 Cflags: -I${includedir}/hs 17 [root@localhost pkgconfig]#
設置pkg-config的環境變量:
pkg-config又是如何找到所需的.pc文件呢?這就需要用到一個環境變量PKG_CONFIG_PATH了。這環境變量寫明.pc文件的路徑,pkg-config命令會讀取這個環境變量的內容,這樣就知道pc文件了。
1 export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
將環境變量增加到.bashrc腳本文件中:
1 PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig 2 export PKG_CONFIG_PATH 3 source .bashrc
pkg-config的查詢結果:
1 [root@localhost pkgconfig]# pkg-config --cflags --libs libhs 2 -I/usr/local/include/hs -L/usr/local/lib -lhs 3 [root@localhost pkgconfig]#
在腳本和編譯的命令行中使用pkg-config的查詢結果:
1 [root@localhost examples]# g++ -o simplegrep simplegrep.c $(pkg-config --cflags --libs libhs) 2 [root@localhost examples]# 3 [root@localhost examples]# echo $(pkg-config --cflags --libs libhs) 4 -I/usr/local/include/hs -L/usr/local/lib -lhs 5 [root@localhost examples]# ls 6 CMakeFiles CMakeLists.txt patbench.cc README.md simplegrep.c 7 cmake_install.cmake Makefile pcapscan.cc simplegrep 8 [root@localhost examples]#
pkg-config官網下載地址如下,需要手動進行安裝。
https://www.freedesktop.org/wiki/Software/pkg-config/