什么是pkg-config
pkg-config是一個linux下的命令,用于獲得某一個庫/模塊的所有編譯相關的信息,使用這個工具,我們可以很方便地編譯一個項目。
為什么使用pkg-config
在linux中,經常會安裝很多第三方的模塊,我們在編譯鏈接他們的時候需要制定頭文件、庫文件的位置,以及庫文件的名字等等。
就以OpenCV為例子,如果我們用g++編譯,就需要指定頭文件庫文件的相關信息,但是因為OpenCV依賴的庫文件很多,我們指定的時候需要鏈接很多庫,這就很麻煩了,比如
g++ DisplayImage.cpp -I/usr/local/include/opencv4/opencv -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev
用pkg-config就可以解決這個問題,使用很簡單:
g++ DisplayImage.cpp $(pkg-config --cflags --libs opencv4)
其實就是用pkg-config --cflags --libs opencv4這個命令代替了-I -L -lxxx.so等指令。
其實構建OpenCV項目還有一種方法是cmake,關于cmake的使用方法,我們以后再介紹。
怎么使用pkg-config
這篇文建是就是根據官方文檔介紹寫的,大家以后需要安裝什么模塊,查看使用方法的,盡量都去官網看一看。
pc文件
pkg-config讀后綴為pc的配置文件的,pkg-config怎么知道pc文件在哪呢?有兩個方法
1 官網中這樣說的
On a typical Unix system, it will search in the directories /usr/lib/pkgconfig and /usr/share/pkgconfig
所以pc文件的路徑就在
- /usr/lib/pkgconfig
- /usr/share/pkgconfig 這兩個目錄下。
2 第二種就是修改PKG_CONFIG_PATH環境變量,將pc文件的路徑添加到這個環境變量中
我們可以執行pkg-config --variable pc_path pkg-config來查看當前pkg-config會搜索的路徑
示例
接下來我們以opencv4.pc來簡單介紹下。
# Package Information for pkg-config
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv4/opencv
includedir_new=${prefix}/include/opencv4
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.2.0
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev
Libs.private: -lm -lpthread -lcudart_static -ldl -lrt -lnppc -lnppial -lnppicc -lnppicom -lnppidei -lnppif -lnppig -lnppim -lnppist -lnppisu -lnppitc -lnpps -lcublas -lcudnn -lcufft -L-L/usr/local/cuda -llib64 -L-L/usr/lib -lx86_64-linux-gnu
Cflags: -I${includedir_old} -I${includedir_new}
1 參數說明
- Name:模塊的名字OpenCV,注意,pkg-config是按照文件名字來查找,和這兒的name無關
- Description:簡單的描述
- Version:模塊的版本信息
- Libs:模塊依賴的lib的信息
- Libs.private:木塊需要但是并未公開出爐的鏈接庫
- Cflags:模塊的編譯器標志
2 執行
$ pkg-config --modversion opencv4
4.2.0
$ pkg-config --cflags opencv4
-I/usr/local/include/opencv4/opencv -I/usr/local/include/opencv4
$ pkg-config --libs opencv4
-L/usr/local/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev
最后再來看一下編譯的指令,是不是就簡單了呢
g++ DisplayImage.cpp $(pkg-config --cflags --libs opencv4)
審核編輯:劉清
-
OpenCV
+關注
關注
32文章
642瀏覽量
42432 -
LINUX內核
+關注
關注
1文章
317瀏覽量
22186
發布評論請先 登錄
【米爾-芯馳D9360商顯板試用評測】FFmpeg移植
《深入理解FFmpeg閱讀體驗》
【OK210試用體驗】之(七)—— 交叉編譯和移植OpenCV 2.4.9 (2)
GTK---制作linux系統工具
【BPI-M64試用體驗】bananapi M64 源碼方式安裝opencv2.4.9
linux環境下如何實現圖片的讀取和顯示
【Toybrick RK3399Pro AI開發板試用體驗】編譯安裝OpenCV 3.4.7
怎樣去安裝并編譯eigen呢
全源碼編譯失敗是為什么?如何解決?
全源碼編譯失敗怎么解決?
請問STM-IDE是否有機會支持Pkg-Config工具?
PKG-Designer Intro
需要了解ubuntu下GTK+配置

剖析ROS編譯教程

評論