windows下编译ffmpeg

本文介绍如何在Windows环境下使用MinGW和MSYS配置环境并编译FFmpeg。包括安装MinGW、MSYS,设置环境变量,以及解决编译过程中遇到的各种问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:

http://blog.youkuaiyun.com/evsqiezi/article/details/8958308#0-tsina-1-77368-397232819ff9a47a7b7e80a40613cfe1

环境配置

        MinGW

       全称叫Minimalist GNU for windows,是一套Windows环境下GNU编译组件的接口,通俗的可以说是Win上的gcc。比起MinGW,也许那只企鹅CygWin更加著名一些,但事实上两者是完全不同的东西。CygWinWin上模拟一套Linux环境,使用Win的存储系统,编译的却是Linux环境下的程序,和虚拟机比较相似;MinGW则是完全的编译出Windows环境下的程序,换句话说,通过MinGW编译出来的exe是可以直接在explorer下双击运行的。从移植的角度上说,使用MinGW才能真正将一个Linux程序移植到Win,而CygWin不能。
       
MSYS

       全称叫Minimal SYStem,是一套运行在Windows上的bash,也就是运行在Win上的Linux Terminal 。这个比较好理解,其实就是在Win上使用Linux的命令行进行操作,可以代替cmd来使用,通过手工修改安装目录下的etc/fstab来定位MinGW的目录。对一些GNU的开源软件,MSYS可能是必需的,因为它们通常需要./configure然后make才能运行。我们将MSYSMinGW配合使用就可以打造出一个Win下的GNU命令行终端和编译系统。

        mingw的下载地址为:http://sourceforge.net/projects/mingw,如mingw-get-setup.exe(版本为0.6.2-beta-2013.1004-1),双击运行,"MingGW Installation Manager"界面出现后,选"Basic Setup",将右侧的选项全部选中,再点菜单“Installation”下的“Apply Changes”,到此开始装置文件,等安装完成后,到MingGW/msys/1.0/etc目录,直接复制fstab.sample出另一个文件fstab,打开到最后几行,在“/mingw”前写入mingw的安装路径,如"d:/mingw",这样目的是为msys指定mingw。

ffmpeg编译

ffmpeg官网下载最新的源码,拷贝到C:\msys\1.0下。

        双击msys.exe,输入lib.exe(此程序在VC的安装目录下,功能为把x.def文件解释称x.lib文件),link.exe,如果提示找不到,需要指定lib.exe跟link.exe及其依赖库的路径,如:export PATH=":C:\Program Files\Microsoft Visual Studio 8\VC\bin:$PATH"。接着按如下三步编译:

1 cd ./ff

./configure --enable-shared --disable-static --enable-memalign-hack

一些参数的说明,

./configure --help(先看看你想要配置啥的),

enable-memalign-hack  是指编译时,使用内存对齐方式,这样以便编译时用mmx或者sse指令对代码进行优化。

disable-debug 禁用调试符号。

 --enable-gpl             allow use of GPL code, the resulting libs,and binaries will be under GPL [no]
  --enable-version3        upgrade (L)GPL to version 3 [no]
  --enable-nonfree         allow use of nonfree code, the resulting libs, and binaries will be unredistributable [no]
 --disable-doc            do not build documentation

--disable-yasm 如果没有yasm,可已去掉,

extra-cflags=-I /(依赖的头文件所在文件夹),

extra-ldflags=-L/(依赖的库文件所在文件夹),

--cpu=i686 得写上,要不会提示:Threading is enabled, but there is no implementation of atomic operations available,

--prefix = 你想安装到哪里,例如:--prefix=/usr/local,

不加--enable-w32threads开关时,出现如下错误:

           In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/
                pthread.h:288:0,
                 from libavcodec/pthread.c:32:
           c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/sched.h:152:53: error:
                expected ')' before 'pid'
           c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/sched.h:154:53: error:
                 expected ')' before 'pid'
            make: *** [libavcodec/pthread.o] Error 1

         增加开关: --enable-w32threads,弃用pthread, 采用windows native thread, 问题消失(原因,可能安装MinGW时pthread包没有下好,下次重试看看。)

如果MinGW/msys没有安装pkg-config, configure 会抱错,但是不影响make。 解决的办法是下载pkg-config for MinGW/msys.

2 make

3 make install

到此编译完成,在local有生成的头文件,库。

遇到的问题

不生成LIB文件
第一步:发现生成了DLL,没有生成LIB,并有如下提示:“$ lib.exe /machine:i386 /def:libavformat/avformat-52.def /out:libavformat/avformat-52.lib
make: lib.exe:Command not found”。
很明显找不到"lib.exe"(此程序用来转def成lib),看来执行call ".../vcvars32.bat"并没有加载所需的路径(??),去VC安装目录下找“lib.exe”跟依赖的库“mspdb80.dll”,将这两个库,拷贝到“msys\1.0\bin”,在mingw命令行上输入“lib.exe”,发现已经不是“...Command not found”的提示了,说明已经能找到"lib.exe"了。
第二步:先试下“lib.exe”能不能用,执行“lib.exe /machine:i386 /def:libavformat/avformat-52.def /out:libavformat/avformat-52.lib”,发现有如下提示:“LINK: extra operand '/def:libavformat/avformat-52.def' TRY 'LINK --help' for more information”。可以看出是link.exe有问题,mingw下的link.exe支持并不是很完善,会导致编译失败或者有问题,因此从VC下找到“link.exe”并替换mingw下的(先备份),再执行刚才的命令,无错误提示。
第三步:用"lib.exe"一个一个生产lib太麻烦,直接依次执行:"make clean","make && make install",发现已经生成了lib文件。

运行ffmpeg.exe提示“丢失libiconv-2.dll”
解决方法:
去“http://www.gnu.org/software/libiconv/”下载库“libiconv-1.14.tar.gz”,放到home/dell下,解压,mingw命令行进入,依次执行“./configure  make  make install”即可。

不生成ffplay.exe的问题

解决方法:
如果不安装SDL的话,就不会生产ffmpeg.exe。SDL可以下载编译好的(见http://www.libsdl.org/download-1.2.php下的SDL-devel-1.2.15-mingw32.tar.gz),也可以自己编译(下载SDL-

1.2.15.tar.gz - GPG signed,解压后进入目录,执行configure && make && make install)。假设编译后生成的include(只含有*.h),lib,bin放在/local目录下。
在configure之前要先配置路径,如:export PATH="$PATH:/usr/local/bin:/usr/local/include:/usr/local/lib",
这样configure之后,"config.mak"会含有“HAVE_SDL=yes”,否则,如何找不到SDL的信息,就会含有“HAVE_SDL=no”,此后编译生成ffplay.exe。

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 华为移动服务(Huawei Mobile Services,简称 HMS)是一个全面开放的移动服务生态系统,为企业和开发者提供了丰富的工具和 API,助力他们构建、运营和推广应用。其中,HMS Scankit 是华为推出的一款扫描服务 SDK,支持快速集成到安卓应用中,能够提供高效且稳定的二维码和条形码扫描功能,适用于商品扫码、支付验证、信息获取等多种场景。 集成 HMS Scankit SDK 主要包括以下步骤:首先,在项目的 build.gradle 文件中添加 HMS Core 库和 Scankit 依赖;其次,在 AndroidManifest.xml 文件中添加相机访问和互联网访问权限;然后,在应用程序的 onCreate 方法中调用 HmsClient 进行初始化;接着,可以选择自定义扫描界面或使用 Scankit 提供的默认扫描界面;最后,实现 ScanCallback 接口以处理扫描成功和失败的回调。 HMS Scankit 内部集成了开源的 Zxing(Zebra Crossing)库,这是一个功能强大的条码和二维码处理库,提供了解码、生成、解析等多种功能,既可以单独使用,也可以与其他扫描框架结合使用。在 HMS Scankit 中,Zxing 经过优化,以更好地适应华为设备,从而提升扫描性能。 通常,ScanKitDemoGuide 包含了集成 HMS Scankit 的示例代码,涵盖扫描界面的布局、扫描操作的启动和停止以及扫描结果的处理等内容。开发者可以参考这些代码,快速掌握在自己的应用中实现扫码功能的方法。例如,启动扫描的方法如下: 处理扫描结果的回调如下: HMS Scankit 支持所有安卓手机,但在华为设备上能够提供最佳性能和体验,因为它针对华为硬件进行了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值