我們平常都是這樣用pkg-config的
$gcc main.c pkg-config --cflags --libs gtk+-2.0
-o main
上面的編譯命令中,pkg-config --cflags --libs gtk+-2.0
的作用就如前面所說的,把gtk的頭文件路徑和庫文件列出來,讓編譯去獲取。–cflags和–libs分別指定頭文件和庫文件。
pkg-config 是在 PKG_CONFIG_PATH 目錄下尋找pc文件來確定各個包的頭文件的目錄和庫的目錄
默認在這裏面有
/usr/local/lib/pkgconfig
舉例opencv.pc
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.10
Libs: -L${exec_prefix}/lib -lopencv_shape -lopencv_dnn -lopencv_highgui -lopencv_objdetect -lopencv_viz -lopencv_superres -lopencv_videostab -lopencv_video -lopencv_photo -lopencv_ml -lopencv_stitching -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}
隨便寫一個opencv 程序如下
#include "highgui.h"
int main(int argc, char** argv)
{
const char *imgpath = "opencv.jpg";
IplImage *img = cvLoadImage(imgpath);//加載圖像文件至內存
cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);//創建一個名爲Example1的窗口
cvShowImage("Example1", img);//顯示圖像
cvWaitKey(0);//等待用戶觸發按鍵
cvReleaseImage(&img);//釋放圖片佔用的內存
cvDestroyWindow("Example1");//銷燬窗口
return 0;
}
保存然後使用pkg-config 來尋找對的頭文件和庫,最後使用gcc編譯
鏈接對應的頭文件
pkg-config --cflags opencv
這句話對應的就是
pkg-config --cflags opencv
鏈接對應的庫
pkg-config --libs opencv
-L/usr/local/lib -lopencv_shape -lopencv_dnn -lopencv_highgui -lopencv_objdetect -lopencv_viz -lopencv_superres -lopencv_videostab -lopencv_video -lopencv_photo -lopencv_ml -lopencv_stitching -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
完整使用gcc編譯代碼如下
gcc opcv.cpp `pkg-config --cflags --libs opencv` -o opencvtest