记一次FFmpeg的编译过程的坑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次FFmpeg的编译过程的坑相关的知识,希望对你有一定的参考价值。

参考技术A 参考文章: iOS开发 - 超详细集成 FFmpeg 步骤

                  iOS集成FFmpeg及视频格式转码

以下是在编译过程遇到的问题:

1.编译出现以下错误信息.

xcrun -sdk iphoneos clang is unable to create an executable file.

C compiler test failed.

Ifyou think configure made a mistake, make sure you are using the latestversion from Git.Ifthe latest version fails, report the problem to theffmpeg-user@ffmpeg.org mailinglistorIRC#ffmpeg on irc.freenode.net.Includethe log file"config.log"produced by configureasthis will helpsolve the problem.

问题链接: https://github.com/kewlbear/FFmpeg-iOS-build-script/issues/119

这时只需执行以下命令即可:

sudo xcode-select --switch /Applications/Xcode.app

2.'libavcodec/avcodec.h' file not found 说是找不到

因该是 headerSearchPath 里面的路径添加的不对.

一种写法:

$(SRCROOT)/FFmpeg_iOS/FFmpeg/include

这个写法  我这边 不得行.

第二中写法:

$(SRCROOT)/$(PRODUCT_NAME)/FFmpeg-iOS/include

我的项目里面这个可以使用

linux学习记录:记一次手动编译安装组件的过程

linux学习记录:记一次手动编译安装组件的过程
  本次安装的组件为 Apache HTTP Server,本篇笔记中记录了全部过程,以供参考。
  apache组件的依赖项比较多,所以安装起来会繁杂一点,不过流程都是大同小异。本次升级中采用的是源码手动编译升级的方法,原因是遇到过没有rpm的系统…所以还是自己操作更踏实点。


目录

零、安装目录总结

  linux下常见的有三个和库有关系的目录,分别是/lib/usr/lib/usr/local/lib。其中usr并不是user的缩写,而是unix system resource的缩写,即系统资料。

  那么这三个目录有何区别?简单来说,/lib是内核级的, /usr/lib是系统级的, /usr/local/lib是用户级的。其中/lib中包含的基本上都是/bin/sbin中程序所使用的库,而另外两个其中就存放了很多用于用户程序的库。

  这次安装的Apache HTTP Server,是用来构建web服务器的,所以很明显是用户级的。由此相关组件我均安装至/usr/local/lib下。

一、安装依赖项

  Apache HTTP Server主要是有三个依赖项aprapr-utilpcre,所以需要先行安装。下面会记录安装的过程。

1. apr

下载并解压apr库,这里选择的版本是1.7.0

$ wget http://archive.apache.org/dist/apr/apr-1.7.0.tar.gz
$ tar -zxf apr-1.7.0.tar.gz

进入目录并使用configure配置makefile,这里选择的目标路径为/usr/local/lib/apr

$ cd apr-1.7.0/
$ ./configure --prefix=/usr/local/lib/apr

编译

$ make

安装

$ make install

进入/usr/local/lib即可查看到apr目录

$ cd /usr/local/lib
$ ll | grep apr

2. apr-util

下载并解压apr-util库,这里选择的版本是1.6.1

$ wget http://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz
$ tar -zxf apr-util-1.6.1.tar.gz

进入目录并使用configure配置makefile,选择目标路径为/usr/local/lib/apr-util,并配置apr路径为/usr/local/lib/apr

$ cd apr-util-1.6.1/
$ ./configure --prefix=/usr/local/lib/apr-util --with-apr=/usr/local/lib/apr

编译

$ make

此时出现报错如下,提示确实头文件expat.h,经查询原因为缺少expat库

xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory
 #include <expat.h>
          ^~~~~~~~~

安装expat库 (下载地址为 https://github.com/libexpat/libexpat/releases )

$ tar -zxf expat-2.4.1.tar.gz
$ cd expat-2.4.1/
$ ./configure
$ make
$ make install

再次编译 apr-util

$ make

安装

$ make install

进入/usr/local/lib即可查看到apr-util目录

$ cd /usr/local/lib
$ ll | grep apr-util

3. pcre

下载并解压pcre库,这里选择的版本是1.7.0

$ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz
$ tar -zxf pcre-8.45.tar.gz

进入目录并使用configure配置makefile,这里选择的目标路径为/usr/local/lib/pcre

$ cd pcre-8.45/
$ ./configure --prefix=/usr/local/lib/pcre

编译

$ make

安装

$ make install

进入/usr/local/lib即可查看到pcre目录

$ cd /usr/local/lib
$ ll | grep pcre


自此,所有的依赖项就安装完成了。

二、安装Apache HTTP Server

下载并解压apache组件,这里选择的版本是2.4.9

$ wget https://mirrors.bfsu.edu.cn/apache//httpd/httpd-2.4.49.tar.gz
$ tar -zxf httpd-2.4.49.tar.gz

进入目录并使用configure配置makefile,这里选择的目标路径为/usr/local/apache,并指定前面安装的三个依赖项的路径

$ cd httpd-2.4.49/
$ ./configure --with-included-apr --prefix=/usr/local/apache --with-apr=/usr/local/lib/apr --with-apr-util=/usr/local/lib/apr-util --with-pcre=/usr/local/lib/pcre

此时出现报错如下,原因是需要将apr和apr-util的目录放到./srclib/下
configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.
注:./srclib/下apr和apr-util文件夹需要去掉版本号!

$ cp -r apr-1.7.0 httpd-2.4.49/srclib/
$ mv httpd-2.4.49/srclib/apr-1.7.0/ httpd-2.4.49/srclib/apr/
$ cp -r apr-util-1.6.1 httpd-2.4.49/srclib/
$ mv httpd-2.4.49/srclib/apr-util-1.6.1/ httpd-2.4.49/srclib/apr-util/

再次生成makefile

$ cd httpd-2.4.49/
$ ./configure --with-included-apr --prefix=/usr/local/apache --with-apr=/usr/local/lib/apr --with-apr-util=/usr/local/lib/apr-util --with-pcre=/usr/local/lib/pcre

编译

$ make

安装

$ make install

进入/usr/local/即可查看到apache目录

$ cd /usr/local/
$ ll | grep apache

由此Apache HTTP Server组件安装完成!执行如下命令可以确认

$ ./apache/bin/httpd -v
Server version: Apache/2.4.49 (Unix)
Server built:   Sep 20 2021 23:23:29

三、总结

  可以看到手动编译安装组件虽然麻烦点,但是主要是麻烦在找依赖项上。安装的过程其实都是大同小异。基本都是如下三部曲:

  1. configure 检查编译环境;
  2. make 对源代码进行编译;
  3. make insall 将生成的可执行文件安装到当前计算机中

  可以发现configure的很多参数也是高度相似的,我感觉其中需要重点注意的是目标路径--prefix。在不了解可选参数时,也可以通过./configure -h来查看,总而言之虽然繁杂一点,但是其实是不难的。

以上是关于记一次FFmpeg的编译过程的坑的主要内容,如果未能解决你的问题,请参考以下文章

linux学习记录:记一次手动编译安装组件的过程

linux学习记录:记一次手动编译安装组件的过程

记一次spring5源码的完整编译过程

记一次Android apk反编译过程

记一次ffmpeg进程阻塞的问题排查过程

记一次Unity4.x源码编译过程之二:开小灶