记一次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
主要是有三个依赖项apr
、apr-util
和pcre
,所以需要先行安装。下面会记录安装的过程。
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
三、总结
可以看到手动编译安装组件虽然麻烦点,但是主要是麻烦在找依赖项上。安装的过程其实都是大同小异。基本都是如下三部曲:
configure
检查编译环境;make
对源代码进行编译;make insall
将生成的可执行文件安装到当前计算机中
可以发现configure
的很多参数也是高度相似的,我感觉其中需要重点注意的是目标路径--prefix
。在不了解可选参数时,也可以通过./configure -h
来查看,总而言之虽然繁杂一点,但是其实是不难的。
以上是关于记一次FFmpeg的编译过程的坑的主要内容,如果未能解决你的问题,请参考以下文章