1. 程式人生 > >pkg-config工具的使用

pkg-config工具的使用

pkg-config程式是幹什麼用的?簡單的說就是向用戶向程式提供相應庫的路徑、版本號等資訊的程式。 譬如說我們執行以下命令:
pkg-config  檢視gcc的CFLAGS引數 $pkg-config --libs --cflags arm-opencv  會顯示如下資訊: -I/usr/local/arm-opencv/include/opencv -I/usr/local/arm-opencv/include -L/usr/local/arm-opencv/lib -lopencv_videostab -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann -lopencv_gpu -lopencv_nonfree -lopencv_photo -lopencv_stitching -lopencv_ts
你看這不就是我們用gcc編譯連線時CFLAGS的引數嗎? 因此當我們需要編譯連線某個庫時,我們只需要把上面那行加入gcc 的引數裡面即可。 這也是configure的作用,它會檢查你需要的包,產生相應的資訊。 那pkg-config
從哪兒知道這些資訊的呢?它是從包名為xxx.pc這個檔案中查詢到的。拿上面那個例子說,它是從arm-opencv.pc這個檔案中查知的。 那pkg-config 又怎麼會知道arm-opencv.pc這個檔案呢? 下面我們看一下pkg-config是怎樣工作的。 預設情況下,pkg-config首 先在prefix/lib/pkgconfig/中查詢相關包(譬如opencv)對應的相應的檔案(opencv.pc)。在linux上上述路徑名為 /usr/lib/pkconfig/。若是沒有找到,它也會到PKG_CONFIG_PATH這個環境變數所指定的路徑下去找。若是沒有找到,它就會報 錯,例如: Package opencv was not found in the pkg-config
 search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found 所以,首先你要告訴系統你的arm-opencv在哪裡 設定環境變數

編輯/etc/bash.bashrc檔案。使用命令#vi /etc/bash.bashrc

在最後一行加入

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/arm-opencv/pkgconfig

Export PKG_CONFIG_PATH

輸入 #source /etc/bash.bashrc 這個配置資訊就可以用了。或者,開啟一個新終端,不用輸入該命令,也可以使用到該配置資訊。


================================================================
檢視一個.pc檔案的內容:
cat /usr/local/arm-opencv/pkgconfig/arm-opencv.pc  #Package Information for pkg-config
prefix=/usr/local/arm-opencv
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir_new=${prefix}/include/opencv
includedir_old=${prefix}/include
Name: arm-opencv
Description:Open Source Computer Vision Library for arm
Version:2.4.3

Cflags: -I${includedir_new} -I${includedir_old}
Libs: -L${exec_prefix}/lib -lopencv_videostab  -lopencv_core -lopencv_imgproc -lopencv_highgui    -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d                -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann             -lopencv_gpu  -lopencv_nonfree  -lopencv_photo -lopencv_stitching   -lopencv_ts 


可見.pc檔案 是對其的庫檔案路徑,頭檔案路徑,版本號,Cflags等一些引數進行封裝。

再來看看
 `pkg-config   --cflags   --libs  arm-opencv意思: 
`pkg-config   --cflags   --libs arm-opencv 是pkg-config從路徑 /usr/local/arm-opencv/pkgconfig/arm-opencv.pc 中提取出來的用於編譯用的。
最後要交叉編譯在arm上執行的程式執行命令 #arm-linux-gcc `pkg-config --cflags arm-opencv` `pkg-config --libs arm-opencv` opencv_arm_test.c -lpthread -lrt -o opencv_arm_test

相關推薦

linux裡命令pkg-config工具的使用

一、編譯和連線         一般來說,如果庫的標頭檔案不在 /usr/include 目錄中,那麼在編譯的時候需要用 -I 引數指定其路徑。由於同一個庫在不同系統上可能位於不同的目錄下,使用者安裝庫的時候也可以將庫安裝在不同的目錄下,所以即使使用同一個庫,由於庫的路徑的 不同,造成了用 -I 引數指定

pkg-config工具的使用

pkg-config程式是幹什麼用的?簡單的說就是向用戶向程式提供相應庫的路徑、版本號等資訊的程式。 譬如說我們執行以下命令:pkg-config  檢視gcc的CFLAGS引數 $pkg-config --libs --cflags arm-opencv  會顯示如下資訊: -I/usr/local/a

pkg-config 工具的介紹與使用

  pkg-config 是一個 Linux 編譯輔助工具。   pkg-config is a helper tool used when compiling applications and libraries. It helps you insert

理解 pkg-config 工具

你在 Unix 或 Linux 下開發過軟體嗎?寫完一個程式,編譯執行完全正常,在你本機上工作得好好的,你放到原始碼管理系統中。然後,告訴你的同事說,你可以取下來用了。這時,你長長的出了一口氣,幾天的工作沒有白費,多麼清新的空氣啊,你開始飄飄然了。 “Hi,怎麼編譯

乾貨:pkg-config工具在實際工程中的用法

    在如今這個開源的環境裡,想要開發某個功能,我們都會下意識的上網搜尋有沒有開源庫,如果有開源庫,那麼好,下載下來給它編譯好,使用。但是在使用過程中,你是否遇到不知如何將第三方庫編譯,連結到自己

Package gtk+-3.0 was not found in the pkg-config search path

path 二進制 all 項目 有時 rpm fedora ack share 問題描述:   在fedora21系統上通過rpmbuild構建fcitx的二進制包時出現以上錯誤,經老程序員指點:“是相應的開發包沒有安裝” 解決辦法:   yum installl gtk3

Ubuntu 16.04 LTS 安裝libvips出現”Package vips was not found in the pkg-config search path”

arp dir exp export ron per gconf 部署 director 使用libvips來操作圖像,libvips的部署參考一個Node.js工程:https://github.com/lovell/sharp 在MAC下安裝很順利,到Linux環境下(

pkg-config 磁盤位置

ibm ++ mysq local pkg sql onf IE mod cflags: pkg-config --cflags libmodbus >> -I/usr/local/include/modbus pkg-config --cflags glib-

minigui 3.2.0:對mgncs剪裁遇到的問題error: The pkg-config script could not be found or is too old.

考慮到嵌入式平臺的儲存和執行空間都有限,在向目標平臺移植時肯定要對minigui及其元件進行剪裁,刪除掉不需要的功能和特性,以縮小程式體積,對mgncs做剪裁時遇到了一個非常奇怪的問題,雖然解決了,但現在也沒找到根本原因: 根據configure --help的提示使用--enable-

pkg-config使用

1 pkg-config介紹 pkg-config用來檢索系統中安裝庫檔案的資訊。典型的是用作庫的編譯和連線。如在Makefile中: program: program.c     cc program.c `pkg-config --

pkg-config妙用

1.makefile 中選項 cflags 指定標頭檔案路徑 eg: CFLAGS=-I/usr/include LDFLAGS: 庫檔案位置 eg: LDFLAGS=-L/usr/lib -L/path/to/your/lib LIBS:告訴連結器要連結哪些庫檔案,

Linux----之pkg-config用法

pkg-config pkg-config程式是幹什麼用的?簡單的說就是向用戶向程式提供相應庫的路徑、版本號等資訊的程式。 譬如說我們執行以下命令: pkg-config  檢視gcc的CFLAGS引數 $pkg-config --libs --cflags o

windows下python 安裝igraph庫報錯 Cannot find the C core of igraph on this system using pkg-config.的解決

     筆者在執行網上給的機器學習程式碼的時候,發現Anaconda 2.5.0 (64-bit)並沒有提供該庫,後來我在github上找到了官方的igraph,結果安裝的時候出現如下錯誤:缺少c模組 經過長時間的摸索,沒有找到c模組對應的處理辦法。但是從stacko

pkg-config的用法

export PKG_CONFIG_PATH=/cv/lib:$PKG_CONFIG_PATH ================================================================檢視一個.pc檔案的內容: [[email protected] pkgco

pkg-config的一些用法

        我們在用第三方庫的時候,經常會用到pkg-config這個東西來編譯程式。那pkg-config究竟是什麼呢?本博文簡單地說一下。 pkgconfig有什麼用:         大家應該都知道用第三方庫,就少不了要使用到第三方的標頭檔案和庫檔案。我們在編譯

mac os 安裝 pkg-config

wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.29.tar.gz . env LDFLAGS="-framework CoreFoundation -framework Carbon" ./confi

Linux環境下原始碼編譯和執行常用的兩個命令:pkg-config和ldconfig

        最近一段時間在研究linux伺服器叢集的相關知識,打算基於corosync和pacemaker來搭建一個linux高可用叢集, 通過編譯原始碼包來了解其依賴的動態庫,在編譯的過程中遇到一些問題,總結一些,供大家以後參考(很通用哦):        我們

pkg-config的用法及庫搜尋路徑設定

一、編譯和連線         一般來說,如果庫的標頭檔案不在 /usr/include 目錄中,那麼在編譯的時候需要用 -I 引數指定其路徑。由於同一個庫在不同系統上可能位於不同的目錄下,使用者安裝庫的時候也可以將庫安裝在不同的目錄下,所以即使使用同一個庫,由於庫的路徑的 不同,造成了用 -I 引數指定

pkg-config命令使用

pkg-config是在編譯應用程式和庫時使用的輔助工具。它可以幫助您在命令列中插入正確的編譯器選項,以便應用程式可以使用 gcc -o test test.c pkg-config --libs --cflags glib-2.0,而不是在何處找到glib(或

[copied]pkg-config 命令的瞭解和使用

背景:copy自163部落格,所以無法直接做轉載文章。贊作者的好文。給出連結:pkg-config命令的瞭解與用法 目的:以下文字的記錄,在於方便隨時自己的查詢。 1.首先,什麼是pkg-config: pkg-config 當你從原始碼編譯軟體時,用來提供依賴