opencv cmake找不到ffmpeg动态包的问题

来源:互联网 发布:mac系统重装的网络加速 编辑:程序博客网 时间:2024/06/08 01:25

前些日子手动编译opencv模块的时候,一直提示找不到ffmpeg libs (例如 libswscale , libavformat 等库)。 奇怪,明明我源码安装了 ffmpeg,但为什么还是找不到呢。

通过cmake的 的脚本,阅读了下cmake的一些脚本,终于找到了原因并解决。 opencv的cmake脚本使用了 CHECK_MODULE 宏, 而这个宏又调用了 pkg_check_module 宏。(此宏的定义在 /usr/share/cmake/FindPkgConfig.cmake)。 pkg_check_module中需要通过 pkg-config 命令来查找是否有对应的package 模块。 所以我们也需要安装 pkg-config 软件包。 那么pkg-config 又是如何来知道我们的系统是否安装了某个模块呢? pkg-config是通过 *.pc 的文件来判断。 例如 如果pkg-config找到了 libswscale2.11.pc 则就说明我们有 libswscale 2.11 库。

而 libswscale2.11.pc 里则定义了 header和lib的目录位置。

所以问题来了,我明明通过源码的方式安装了,但是还是提示找不到呢。 原来是 pkg-config 寻找 pc文件目录的问题。

默认pkg-config(笔者的安装版本) 只会寻找 /usr/share/pkgconfig/*.pc 和 /usr/lib/pkgconfig/*.pc , /usr/lib64/pkgconfig/*.pc 。 而我通过源码方式安装的时候, 对应的库的pc文件 默认安装到了 /usr/local/lib/pkgconfig/。 所以pkg-config找不到,也就认为没有安装了。 经过笔者测试,如果通过 yum 安装的方式,则pc文件会放到 /usr/lib 或者 /usr/lib64/ 里,所以就没有这个问题。

解决方法:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig;$PKG_CONFIG_PATH

这样export下,就没有问题了。

0 0