从编译ffmpeg/examples,进而了解pkg-config

在编译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



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 为了在QT中使用FFmpeg和WebEngine,你需要进行一些编译和配置。首先,你需要在QT源码根目录下新建一个build_hisi.sh文件,内容如下: ``` #!/bin/bash ./configure -v \ -extprefix /home/user/soft/QT5.12_hisi \ -recheck-all \ -opensource -confirm-license \ -release -shared \ -xplatform linux-aarch64-himix100 \ -sysroot /opt/hisi-linux/x86-arm/aarch64-himix100-linux/target \ -no-gcc-sysroot -pkg-config \ -nomake examples -nomake tests -make libs ``` 这个脚本文件用于配置QT的编译选项和路径。接下来,你需要编译和安装udev。使用以下命令进行编译: ``` $ ./configure --prefix=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/usr --disable-extras --disable-introspection --with-pic --with-systemdsystemunitdir=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/usr/share --build=x86_64-pc-linux-gnu --host=aarch64-himix100-linux --target=aarch64-linux-gnu CFLAGS='-w -mcpu=cortex-a73.cortex-a53' LDFLAGS='-w -mcpu=cortex-a73.cortex-a53' $ make -j8 # source /etc/profile # make install ``` 这些命令将编译和安装udev,并将其安装到指定的目录中。最后,你需要编译和配置OpenSSL。使用以下命令进行配置: ``` $ ./config no-asm shared --prefix=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/usr --openssldir=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/usr ``` 这个命令将配置OpenSSL的编译选项和路径。完成配置后,你可以使用make命令进行编译和安装。这样,你就可以在QT中使用FFmpeg和WebEngine了。 #### 引用[.reference_title] - *1* *2* *3* [海思3559A QT 5.12移植(带webengine 和 opengl es)](https://blog.csdn.net/weixin_30781107/article/details/97452727)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值