日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pkg-config 详解

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pkg-config 详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/newchenxf/article/details/51750239

1 什么是pkg-config

pkg-config是一個linux下的命令,用于獲得某一個庫/模塊的所有編譯相關的信息。
例子:

pkg-config opencv –libs –cflags

結果:

-I/usr/include/opencv

/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so /usr/lib/x86_64-linux-gnu/libopencv_contrib.so /usr/lib/x86_64-linux-gnu/libopencv_core.so /usr/lib/x86_64-linux-gnu/libopencv_features2d.so /usr/lib/x86_64-linux-gnu/libopencv_flann.so /usr/lib/x86_64-linux-gnu/libopencv_gpu.so /usr/lib/x86_64-linux-gnu/libopencv_highgui.so /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so /usr/lib/x86_64-linux-gnu/libopencv_legacy.so /usr/lib/x86_64-linux-gnu/libopencv_ml.so /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so /usr/lib/x86_64-linux-gnu/libopencv_ocl.so /usr/lib/x86_64-linux-gnu/libopencv_photo.so /usr/lib/x86_64-linux-gnu/libopencv_stitching.so /usr/lib/x86_64-linux-gnu/libopencv_superres.so /usr/lib/x86_64-linux-gnu/libopencv_ts.so /usr/lib/x86_64-linux-gnu/libopencv_video.so /usr/lib/x86_64-linux-gnu/libopencv_videostab.so

-lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab

  • 1
  • 2
  • 3
  • 4
  • 5

2 為什么要有pkg-config

從上面的例子,可以看出,pkg-config給出了opencv的頭文件和庫的所有信息!
這有什么好處

所有用opencv的其他程序,在編譯時,只需要寫“pkg-config opencv –libs –cflags”,而不需要自己去找opencv的頭文件在哪里,要鏈接的庫在哪里!省時省力!
如果你寫了一個庫,不管是靜態的還是動態的,要提供給第三方使用,那除了給人家庫/頭文件,最好也寫一個pc文件,這樣別人使用就方便很多,不用自己再手動寫依賴了你哪些庫,只需要敲一個”pkg-config [YOUR_LIB] –libs –cflags”。

3 pkg-config的信息從哪里來?

很簡單,有2種路徑:
第一種:取系統的/usr/lib下的所有*.pc文件。
第二種:PKG_CONFIG_PATH環境變量所指向的路徑下的所有*.pc文件。

這些pc文件什么時候有的?都是在你安裝某個庫/模塊的時候,添加的。比如你往系統安裝opencv時,就會在/usr/lib/目錄下,放一個opencv.pc。
比如,我的PC是這樣的。你可以看到,有各種各樣的pc文件。

chenxf@chenxf-PC:/usr/lib/x86_64-linux-gnu/pkgconfig$ ls alsa.pc cairo-tee.pc fontenc.pc gl.pc harfbuzz.pc libdrm_radeon.pc libswscale.pc pixman-1.pc x11-xcb.pc xcb-sync.pc xkbcommon.pc xvmc.pc opencv.pc cairo-xcb.pc freetype2.pc glu.pc ice.pc libfs.pc libdrm.pc libraw1394.pc pciaccess.pc xcb-shm.pc ......
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

那么,pc文件到底寫了什么?
打開看看就知道啦。比如opencv.pc。

# Package Information for pkg-config prefix=/usr exec_prefix=${prefix} libdir=${prefix}/lib/x86_64-linux-gnu includedir_old=${prefix}/include/opencv includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 2.4.8
Libs: -L${libdir} ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_contrib.so -lopencv_contrib ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_core.so -lopencv_core ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_features2d.so -lopencv_features2d ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_flann.so -lopencv_flann ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_gpu.so -lopencv_gpu ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_highgui.so -lopencv_highgui ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_legacy.so -lopencv_legacy ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_ml.so -lopencv_ml ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_ocl.so -lopencv_ocl ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_photo.so -lopencv_photo ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_stitching.so -lopencv_stitching ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_superres.so -lopencv_superres ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_ts.so -lopencv_ts ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_video.so -lopencv_video <spanclass="hljs?list">execprefix</span>/lib/x8664?linux?gnu/libopencvvideostab.so?lopencvvideostabCflags:?<spanclass="hljs?keyword">I</span><span class="hljs-list">{exec_prefix}</span>/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_videostab Cflags: -<span class="hljs-keyword">I</span><spanclass="hljs?list">execp?refix</span>/lib/x866?4?linux?gnu/libopencvv?ideostab.so?lopencvv?ideostabCflags:?<spanclass="hljs?keyword">I</span>{includedir_old} -I${includedir_new}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

一目了然,就是存了所有opencv的頭文件/庫的路徑信息。和第一步我們敲的”pkg-config opencv –libs –cflags”的結果,是一樣一樣的~~~

4 pkg-config都有哪些命令參數

所有參數,可以通過pkg-config –help來查看。
但我覺得其實就3個參數有用。

4.1 “pkg-config [NAME] –cflags”,查看頭文件信息。

(注意這里是2個“-”,不知道為啥我原文寫2個“-”,生成文章時只有一個。。。囧。。。不管了,反正提醒你一下啦)
例子:

chenxf@chenxf-PC:~$ pkg-config opencv –cflags

結果:

-I/usr/include/opencv
  • 1

4.2 pkg-config [NAME] –libs,查看庫信息。

例子:

chenxf@chenxf-PC:~$ pkg-config opencv –libs

結果:

/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so /usr/lib/x86_64-linux-gnu/libopencv_contrib.so /usr/lib/x86_64-linux-gnu/libopencv_core.so /usr/lib/x86_64-linux-gnu/libopencv_features2d.so /usr/lib/x86_64-linux-gnu/libopencv_flann.so /usr/lib/x86_64-linux-gnu/libopencv_gpu.so /usr/lib/x86_64-linux-gnu/libopencv_highgui.so /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so /usr/lib/x86_64-linux-gnu/libopencv_legacy.so /usr/lib/x86_64-linux-gnu/libopencv_ml.so /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so /usr/lib/x86_64-linux-gnu/libopencv_ocl.so /usr/lib/x86_64-linux-gnu/libopencv_photo.so /usr/lib/x86_64-linux-gnu/libopencv_stitching.so /usr/lib/x86_64-linux-gnu/libopencv_superres.so /usr/lib/x86_64-linux-gnu/libopencv_ts.so /usr/lib/x86_64-linux-gnu/libopencv_video.so /usr/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab
  • 1

4.3 pkg-config –list-all。查看pkg-config的所有模塊信息。

例子:

pkg-config –list-all

結果:

libass libass - LibASS is an SSA/ASS subtitles rendering library xext Xext - Misc X Extension Library pthread-stubs pthread stubs - Stubs missing from libc for standard pthread functions videoproto VideoProto - Video extension headers libxdot libxdot - Library for parsing graphs in xdot format gtk+-unix-print-2.0 GTK+ - GTK+ Unix print support opencv OpenCV - Open Source Computer Vision Library xcb-randr XCB RandR - XCB RandR Extension renderproto RenderProto - Render extension headers xcb-present XCB Present - XCB Present Extension gdk-2.0 GDK - GTK+ Drawing Kit (x11 target) libavfilter libavfilter - FFmpeg audio/video filtering library glesv2 glesv2 - Mesa OpenGL ES 2.0 library xcursor Xcursor - X Cursor Library libavcodec libavcodec - FFmpeg codec library xi Xi - X Input Extension Library xrandr Xrandr - X RandR Library
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

5 如何添加自己的pc文件

如上文所說,有2種方式。
1. 把你的pc文件,直接放到/usr/lib/…默認路徑下。
2. 把你的pc文件的路徑寫到PKG_CONFIG_PATH環境變量里。
比如,你可以在/etc/.bashrc或者/home/chenxf/.bashrc的文件末尾添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/chenxf/ffmpeg_build/lib/pkgconfig
export PKG_CONFIG_PATH

那么,pkg-config就會到/home/chenxf/ffmpeg_build/lib/pkgconfig尋找*.pc文件。

我猜你想問,那我這個pc文件何時生效呢?
答案是,如果是/usr/lib下,立馬生效!!!如果在環境變量里,只要先source ~/.bashrc一下,讓環境變量生成,也立馬生效
并不需要什么pkg-config update啥命令,讓其更新信息。
其實每次你執行pkg-config,都會去遍歷所有的*.pc文件。

6 如何自己寫pkg-config的pc文件

其實很簡單,只需要拿別人的pc文件改一改就行了。
不過我還是提一下吧。
pc文件的所有參數:

Name: 該模塊的名字,比如你的pc名字是xxxx.pc,那么名字最好也是xxxx。
Description: 模塊的簡單描述。上文pkg-config –list-all命令出來的結果,每個名字后面就是description。
URL: 用戶可以通過該URL獲得更多信息,或者下載信息。也是輔助的,可要可不要。
Version: 版本號。
Requires: 該模塊有木有依賴于其他模塊。一般沒有。
Requires.private: 該模塊有木有依賴于其他模塊,并且還不需要第三方知道的。一般也沒有。
Conflicts: 有沒有和別的模塊沖突。常用于版本沖突。比如,Conflicts: bar < 1.2.3,表示和bar模塊的1.2.3以下的版本有沖突。
Cflags: 這個就很重要了。pkg-config的參數–cflags就指向這里。主要用于寫本模塊的頭文件的路徑。
Libs: 也很重要,pkg-config的參數–libs就指向這里。主要用于寫本模塊的庫/依賴庫的路徑。
Libs.private: 本模塊依賴的庫,但不需要第三方知道。

其實必須寫的只有5個。Name、Description、Version、Cflags、Libs。

我們舉2個例子吧。一個動態庫,一個靜態庫。

例子1 動態庫的pc文件

假設我寫了libfoo.so,我的庫將會被安裝到/usr/local/lib/,頭文件會放到/usr/local/include/foo。那么,pc文件可以這么寫。

prefix=/usr/local exec_prefix=${prefix} includedir=${prefix}/include libdir=${exec_prefix}/lib

Name: foo
Description: The foo library
Version: 1.0.0
Cflags: -I<!????></span>includedir/foo<spanclass="hljs?constant">Libs</span><spanclass="hljs?symbol">:</span>?<spanclass="hljs?constant">L</span><spanclass="hljs?variable">{<!-- --></span>includedir}/foo <span class="hljs-constant">Libs</span><span class="hljs-symbol">:</span> -<span class="hljs-constant">L</span><span class="hljs-variable"><!????></span>includedir/foo<spanclass="hljs?constant">Libs</span><spanclass="hljs?symbol">:</span>?<spanclass="hljs?constant">L</span><spanclass="hljs?variable">{libdir} -lfoo

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

例子2 靜態庫的pc文件

正如我的另一博文所說,靜態庫鏈接動態庫時,如何使用該靜態庫,如果我有個靜態庫libXXX.a,它依賴了很多其他動態庫libAA.so,libBB.so,那么第三方程序DD.c要使用libXXX.a時,編譯時還得鏈接libAA.so,libBB.so。
如何讓第三方程序,可以不用操心我這個libXXX.a到底依賴了什么?很簡答,就是我的libXXX.a寫一個pc文件。

其實這個問題,就發生在我最近搞的ffmpeg事情上。
我下載了ffmpg,按照guide編譯好了。生成了ffmpeg,以及相關的庫。

chenxf@chenxf-PC:~/ffmpeg_build/lib$ ls libavcodec.a libavdevice.a libavfilter.a libavformat.a libavutil.a libpostproc.a libswresample.a libswscale.a libx264.a libx265.a pkgconfig
  • 1
  • 2

當我寫了個程序,想使用libavcodec.a,卻各種編譯錯誤。

gcc test.c -o test -I/home/chenxf/ffmpeg_build/include/ -L/home/chenxf/ffmpeg_build/lib -lavcodec


/home/chenxf/ffmpeg_sources/ffmpeg/libavcodec/aacdec_template.c:1117:對‘pthread_once’未定義的引用
/home/chenxf/ffmpeg_build/lib/libavcodec.a(aacdec_fixed.o):在函數‘aac_decode_init’中:
/home/chenxf/ffmpeg_sources/ffmpeg/libavcodec/aacdec_template.c:1117:對‘pthread_once’未定義的引用
/home/chenxf/ffmpeg_build/lib/libavcodec.a(aacenc.o):在函數‘aac_encode_init’中:
/home/chenxf/ffmpeg_sources/ffmpeg/libavcodec/aacenc.c:1039:對‘pthread_once’未定義的引用

我當時還百思不得其解,為何用編譯好了的libavcodec.a,第三方的程序,還會跟什么pthread有關!!!
答案是,第三方程序,還要鏈接libpthread.so。
那我如果編譯第三方程序,還得一個個添加libavcodec.a鎖依賴的庫,豈不是累死了?!!!!

而其實,ffmpeg已經操心過這個事情了,它編譯好了后,也生成了pc文件。就在“/home/chenxf/ffmpeg_build/lib/pkgconfig”

chenxf@chenxf-PC:~/ffmpeg_build/lib/pkgconfig$ ls
libavcodec.pc libavdevice.pc libavfilter.pc libavformat.pc libavutil.pc libpostproc.pc libswresample.pc libswscale.pc x264.pc x265.pc

隨便打開一個看看。
libavcodec.pc

prefix=/home/chenxf/ffmpeg_build exec_prefix=${prefix} libdir=${prefix}/lib includedir=${prefix}/include

Name: libavcodec
Description: FFmpeg codec library
Version: 57.38.100
Requires: libswresample >= 2.0.101, libavutil >= 55.22.101
Requires.private:
Conflicts:
Libs: -Llibdir<spanclass="hljs?attribute">?lavcodec</span><spanclass="hljs?attribute">?lXv</span><spanclass="hljs?attribute">?lX11</span><spanclass="hljs?attribute">?lXext</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?lXau</span><spanclass="hljs?attribute">?lXdmcp</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?shm</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?lXau</span><spanclass="hljs?attribute">?lXdmcp</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?xfixes</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?render</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?shape</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?lXau</span><spanclass="hljs?attribute">?lXdmcp</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?shape</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?lXau</span><spanclass="hljs?attribute">?lXdmcp</span><spanclass="hljs?attribute">?lX11</span><spanclass="hljs?attribute">?lasound</span><spanclass="hljs?attribute">?L</span>/home/chenxf/ffmpegbuild/lib<spanclass="hljs?attribute">?lx265</span><spanclass="hljs?attribute">?lstdc</span><spanclass="hljs?subst">++</span><spanclass="hljs?attribute">?lm</span><spanclass="hljs?attribute">?lrt</span><spanclass="hljs?attribute">?ldl</span><spanclass="hljs?attribute">?L</span>/home/chenxf/ffmpegbuild/lib<spanclass="hljs?attribute">?lx264</span><spanclass="hljs?attribute">?lpthread</span><spanclass="hljs?attribute">?lm</span><spanclass="hljs?attribute">?ldl</span><spanclass="hljs?attribute">?lfreetype</span><spanclass="hljs?attribute">?lz</span><spanclass="hljs?attribute">?lpng12</span><spanclass="hljs?attribute">?lass</span><spanclass="hljs?attribute">?lfontconfig</span><spanclass="hljs?attribute">?lenca</span><spanclass="hljs?attribute">?lm</span><spanclass="hljs?attribute">?lfribidi</span><spanclass="hljs?attribute">?lexpat</span><spanclass="hljs?attribute">?lfreetype</span><spanclass="hljs?attribute">?lz</span><spanclass="hljs?attribute">?lpng12</span><spanclass="hljs?attribute">?lm</span><spanclass="hljs?attribute">?llzma</span><spanclass="hljs?attribute">?lz</span><spanclass="hljs?attribute">?pthread</span>Libs<spanclass="hljs?builtin">.</span><spanclass="hljs?keyword">private</span>:Cflags:<spanclass="hljs?attribute">?I</span>{libdir} <span class="hljs-attribute">-lavcodec</span> <span class="hljs-attribute">-lXv</span> <span class="hljs-attribute">-lX11</span> <span class="hljs-attribute">-lXext</span> <span class="hljs-attribute">-lxcb</span> <span class="hljs-attribute">-lXau</span> <span class="hljs-attribute">-lXdmcp</span> <span class="hljs-attribute">-lxcb</span><span class="hljs-attribute">-shm</span> <span class="hljs-attribute">-lxcb</span> <span class="hljs-attribute">-lXau</span> <span class="hljs-attribute">-lXdmcp</span> <span class="hljs-attribute">-lxcb</span><span class="hljs-attribute">-xfixes</span> <span class="hljs-attribute">-lxcb</span><span class="hljs-attribute">-render</span> <span class="hljs-attribute">-lxcb</span><span class="hljs-attribute">-shape</span> <span class="hljs-attribute">-lxcb</span> <span class="hljs-attribute">-lXau</span> <span class="hljs-attribute">-lXdmcp</span> <span class="hljs-attribute">-lxcb</span><span class="hljs-attribute">-shape</span> <span class="hljs-attribute">-lxcb</span> <span class="hljs-attribute">-lXau</span> <span class="hljs-attribute">-lXdmcp</span> <span class="hljs-attribute">-lX11</span> <span class="hljs-attribute">-lasound</span> <span class="hljs-attribute">-L</span>/home/chenxf/ffmpeg_build/lib <span class="hljs-attribute">-lx265</span> <span class="hljs-attribute">-lstdc</span><span class="hljs-subst">++</span> <span class="hljs-attribute">-lm</span> <span class="hljs-attribute">-lrt</span> <span class="hljs-attribute">-ldl</span> <span class="hljs-attribute">-L</span>/home/chenxf/ffmpeg_build/lib <span class="hljs-attribute">-lx264</span> <span class="hljs-attribute">-lpthread</span> <span class="hljs-attribute">-lm</span> <span class="hljs-attribute">-ldl</span> <span class="hljs-attribute">-lfreetype</span> <span class="hljs-attribute">-lz</span> <span class="hljs-attribute">-lpng12</span> <span class="hljs-attribute">-lass</span> <span class="hljs-attribute">-lfontconfig</span> <span class="hljs-attribute">-lenca</span> <span class="hljs-attribute">-lm</span> <span class="hljs-attribute">-lfribidi</span> <span class="hljs-attribute">-lexpat</span> <span class="hljs-attribute">-lfreetype</span> <span class="hljs-attribute">-lz</span> <span class="hljs-attribute">-lpng12</span> <span class="hljs-attribute">-lm</span> <span class="hljs-attribute">-llzma</span> <span class="hljs-attribute">-lz</span> <span class="hljs-attribute">-pthread</span> Libs<span class="hljs-built_in">.</span><span class="hljs-keyword">private</span>: Cflags: <span class="hljs-attribute">-I</span>libdir<spanclass="hljs?attribute">?lavcodec</span><spanclass="hljs?attribute">?lXv</span><spanclass="hljs?attribute">?lX11</span><spanclass="hljs?attribute">?lXext</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?lXau</span><spanclass="hljs?attribute">?lXdmcp</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?shm</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?lXau</span><spanclass="hljs?attribute">?lXdmcp</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?xfixes</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?render</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?shape</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?lXau</span><spanclass="hljs?attribute">?lXdmcp</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?shape</span><spanclass="hljs?attribute">?lxcb</span><spanclass="hljs?attribute">?lXau</span><spanclass="hljs?attribute">?lXdmcp</span><spanclass="hljs?attribute">?lX11</span><spanclass="hljs?attribute">?lasound</span><spanclass="hljs?attribute">?L</span>/home/chenxf/ffmpegb?uild/lib<spanclass="hljs?attribute">?lx265</span><spanclass="hljs?attribute">?lstdc</span><spanclass="hljs?subst">++</span><spanclass="hljs?attribute">?lm</span><spanclass="hljs?attribute">?lrt</span><spanclass="hljs?attribute">?ldl</span><spanclass="hljs?attribute">?L</span>/home/chenxf/ffmpegb?uild/lib<spanclass="hljs?attribute">?lx264</span><spanclass="hljs?attribute">?lpthread</span><spanclass="hljs?attribute">?lm</span><spanclass="hljs?attribute">?ldl</span><spanclass="hljs?attribute">?lfreetype</span><spanclass="hljs?attribute">?lz</span><spanclass="hljs?attribute">?lpng12</span><spanclass="hljs?attribute">?lass</span><spanclass="hljs?attribute">?lfontconfig</span><spanclass="hljs?attribute">?lenca</span><spanclass="hljs?attribute">?lm</span><spanclass="hljs?attribute">?lfribidi</span><spanclass="hljs?attribute">?lexpat</span><spanclass="hljs?attribute">?lfreetype</span><spanclass="hljs?attribute">?lz</span><spanclass="hljs?attribute">?lpng12</span><spanclass="hljs?attribute">?lm</span><spanclass="hljs?attribute">?llzma</span><spanclass="hljs?attribute">?lz</span><spanclass="hljs?attribute">?pthread</span>Libs<spanclass="hljs?builti?n">.</span><spanclass="hljs?keyword">private</span>:Cflags:<spanclass="hljs?attribute">?I</span>{includedir}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

看到沒,看到沒?!這里已經把libavcodec.a的所有依賴庫,全部列出來了!!!!
所以,我唯一要做的,就是把這些pc文件的路徑,寫到PKG_CONFIG_PATH。
我就在/home/chenxf/.bashrc末行添加了

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/chenxf/ffmpeg_build/lib/pkgconfig
export PKG_CONFIG_PATH

然后

source /home/chenxf/.bashrc

然后重新編譯我的代碼,就通過了!!!!好開森的樣子!!!!…………^^

gcc test.c -o test pkg-config libavcodec libavformat libavutil --cflags --libs

清爽的編譯命令,就能讓我用盡所有ffmpeg的所有庫,多好啊!感謝發明pkg-config的人!!!

總結

以上是生活随笔為你收集整理的pkg-config 详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。