pkg-config 與gcc 配合的使用

我們平常都是這樣用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章