在编译ffmpeg/doc/example的时候,发现该目录下只有一些.C文件和makefile,于是,很自然的输入:make。
期待成功编译的结果,然而却报出了很多错误,主要错误如下:
Package lib* was not found in the pkg-config search path.
Perhaps you should add the directory containing `lib*.pc'
to the PKG_CONFIG_PATH environment variable
No package 'lib*' found
不得其解,于是打开makefiel文件:
# use pkg-config for getting CFLAGS and LDLIBS
FFMPEG_LIBS= libavdevice \
libavformat \
libavfilter \
libavcodec \
libswresample \
libswscale \
libavutil \
CFLAGS += -Wall -O2 -g
CFLAGS += $(shell pkg-config --cflags $(FFMPEG_LIBS))
LDLIBS += $(shell pkg-config --libs $(FFMPEG_LIBS))
EXAMPLES= decoding_encoding \
filtering_video \
filtering_audio \
metadata \
muxing \
OBJS=$(addsuffix .o,$(EXAMPLES))
# the following examples make explicit use of the math library
decoding_encoding: LDLIBS += -lm
.phony: all clean
all: $(OBJS) $(EXAMPLES)
clean:
rm -rf $(EXAMPLES) $(OBJS)
发现并非很复杂,于是决定研究它。
上网查资料,知道了pkg-config这个东西,下面简单介绍一下。
pkg-config提供了下面几个功能:
1.检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
2.获得编译预处理参数,如宏定义,头文件的位置。
3.获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
4.自动加入所依赖的其它库的设置。
这一切都自动的,库文件安装在哪里都没关系!
看makefile中的:$(shell pkg-config --cflags $(FFMPEG_LIBS))
这句的意思是在Terminal(终端)中输入:pkg-config --cflags$(FFMPEG_LIBS),
这里的$(FFMPEG_LIBS)可以用FFMPEG_LIBS:libavdevice 、libavformat 、libavfilter、libavcodec 、libswresample 、libswscale 、libavutil 等等来代替。
你可以输入命令试试:pkg-config --cflagslibavdevice 。
发现了跟make时候,差不多的一个错误:Packagelibavdevice was not found in the pkg-config search path.
虽然得到错误,不过却很开心,起码找到了错误的来源,就是这个pkg-config,于是开始研究pkg-config的运行原理。
原来,为了让pkg-config可以得到这些信息,要求库的提供者,提供一个.pc文件,.pc文件里面存放的是一些头文件及库的地址。这些.pc文件默认放在/usr/share/pkgconfig里面,如果你改变了.pc的存放路径,必须要让计算机知道,所以需要修改 PKG_CONFIG_PATH 。
假设我的.pc文件放到了/usr/local/lib/pkgconfig下,我需要做如下修改:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
现在大功告成,我们来make一下:
发现,编译成功啦!!!
很多同学可能跟我一样很兴奋(要知道编译这个我竟然折腾了一个星期),但是,这里还有个小问题:
如果你把Terminal关闭并重新打开一个新的Terminal,并且重新编译一次的话,你会发现,还是刚刚那些错误:Packae libname was not found in the pkg-config search path.
为什么呢?
原来环境变量的设置只对当前的终端窗口有效。如果到了没有进行上述设置的终端窗口中,pkg-config 将找不到.pc 文件。
难道每次都要输入修改PKG_CONFIG_PATH的命令才行吗,这也太麻烦了吧?
对,笔者也觉得太麻烦,于是继续google,发现了下面几种方法,可以替代上面的繁琐的步骤:
1、将/usr/local/lib/pkgconfig中的所有.pc转移到/usr/share/pkgconfig中。
2、将修改路径命令:export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH,写入一个文件(如cyh_Path),每次编译之前先将该文件中的命令运行:$source cyh_Path,然后再make
3、修改自己的用户配置文件中( ~/.bash_profile),在里面添加一句:export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH,重启之后即可。
三个方法均可以,笔者推荐的是第三种方法,当然是因为这样最简单了(笔者是个大懒人,不过很多时候,不就是因为懒,才学到一些东西,就像这三个方法的发现不就是因为懒吗?哈哈!)。
--------------------------------by-----zerocool---------------------------2012年10月3日22:06:54
分享到:
相关推荐
configuration: --prefix=/root/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --extra-libs=-lpthread --extra-libs=-lm --...
附件为Centos6.6环境下静态编译的ffmpeg-3.3.3版本linux可执行程序和SDK库,其中包含基本的x264、aac编解码库;还增加字幕渲染(drawtext参数)、水印叠加等功能;configure配置参数为: ./configure --target-os=...
configuration: --prefix=/root/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --extra-libs=-lpthread --extra-libs=-lm --...
/usr/local/ffmpeg/ffmpeg-3.2.4/libavdevice /usr/local/ffmpeg/ffmpeg-3.2.4/libavfilter /usr/local/ffmpeg/ffmpeg-3.2.4/libavformat /usr/local/ffmpeg/ffmpeg-3.2.4/libavcodec /usr/local/ffmpeg/ffmpeg-...
FFmpeg是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。这个项目是由 Fabrice Bellard 发起的,现在由 Michael Niedermayer 主持。可以轻易地实现多种视频格式之间的相互转换,例如...
音视频转换
用于linux系统上搭建流媒体服务器,可以用来搭建直播视频流
第一:下载FFMpeg----https://ffmpeg.zeranoe.com/builds/,自行选择自己需要的多少位的静态程序 第二:解压到指定文件夹下---d:/ffmpeg 第三:添加到环境变量:d:/ffmpeg/bin 第四:查看FFmpeg版本信息---ffmpeg....
ffmpeg-master-latest-win64-gpl.zip
ffmpeg库:ffmpeg-n5.1-latest-win64-gpl-shared-5.1
ffmpeg各个组件下载地址+编译方法+错误处理,文件中都有记录,环境是mingw,ffmpeg版本是2.6.2
该库集成了x264 faac faad等ffmpeg在windows上能集成的所有库,编译命令配置如下 configuration: --prefix=d:/OmniCoder/svn_build --enable-memalign-hack --enable -shared --disable-static --disable-encoder=...
ffmpeg学习笔5 编译ffmpeg(Win10+android-ndk-r22)生成的arm64-v8a动、静态库 https://blog.csdn.net/aggs1990/article/details/124577714 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者...
FFmpeg是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。这个项目是由 Fabrice Bellard 发起的,现在由 Michael Niedermayer 主持。可以轻易地实现多种视频格式之间的相互转换,例如...
针对Android平台编译好的FFmpeg 6.0的动态链接库.so文件,包括armeabi-v7a ,arm64-v8a两个版本.
对于新手非常友好,只要找到相对应的视频链接就可以分离,附带ffmpeg
可以使用的ffmpeg-4.2.2-win64-static.zip
是在windows 10下编译的动态库(libx264已被静态编译进去了),亲测可用。 FFMPEG版本:4.3.1 编译参数:./configure --disable-x86asm --enable-shared --disable-static --enable-gpl --enable-libx264 --extra-...
linux系统java arm转MP3,linux系统java arm转MP3,linux系统java arm转MP3,linux系统java arm转MP3,linux系统java arm转MP3,linux系统java arm转MP3,linux系统java arm转MP3,linux系统java arm转MP3,linux...
以前从ffmpeg官网下的,现在官网的下载跟以前版本不一样了,这两个跟现有的教程用起来比较接近,找了好久也没有从官网下载成功,分享出来方便和我有一样需求的朋友