ffmpeg添加到环境变量_Windows + MSVC环境编译ffmpeg

实测成功环境: WIN7 + VS2013 + FFmpeg4.3 和 WIN10 + VS2019 + FFmpeg4.3(N-98819-ge2589ac)

源码下载

  • FFmpeg源码

依赖工具

  • MSYS2
  • ​YASM

下载安装MSYS2; 下载YASM,将文件名改为yasm.exe,将它所在的目录加入到环境变量中。

配置头文件和库搜索路径

以下几种方法任选一种

1.使用vcvarsall.bat

  • 打开cmd,执行vcvarsall.bat(一般在C:Program Files (x86)Microsoft Visual Studio 12.0VC目录下,vcvarsall.bat将会设置INCLUDE和LIB环境变量,以便cl能找到对应头文件和.lib文文件);
  • 继续在cmd中执行msys2安装目录下的msys2_shell.cmd
vcvarsall.bat x86
msys2_shell.cmd -use-full-path

59506d938b91947dbb8c84088476a094.png

2.在VS中打开msys2

  • 在VS中选择:Tools -> External tools... -> Add

79502ebd85b89337a65043a68531b80b.png
  • 在VS中启动msys2:Tools->msys2

确保msvc编译器cl和链接器link是否正常

我们使用的是微软的编译器cl.exe和链接器link.exe,然而msys2自带有link.exe,和msvc 的link.exe重名,且前者所在目录在环境变量中靠前,所以运行link命令时实际运行的是msys2的link.exe,这将造成链接出错

0dd6dae0bd2246926263cdaecc8437c8.png

解决方法

  • 将<msys2安装目录>usrbin下的link.exe重新命名为其它名称;
  • 或者,想办法修改PATH的顺序

msys2 安装pkg-config,diffutils,make工具(msys2没带这些工具,手动安装)

pacman -S pkg-config
pacman -S diffutils
pacman -S make

db65946fbf611b5a6b12330506fab0ec.png

2.构建

切换至FFmpeg源码目录,执行

./configure --toolchain=msvc
make

75c1a998f39bebf9fc2db76f425e3b33.png

be11dd6af61c1addba0f686c9c96e021.png

构建成功:

49befb78e2219e19fdcc9dfc3d98ba96.png

编译ffplay

虽然ffplay是默认enable的,但ffplay的编译依赖第三方库sdl2,所以上述步骤可能因为缺少sdl2依赖而无法编译出ffplay.exe。
下面是解决方法 sdl2下载 下载VC版本,解压。

1.配置sdl2对msvc可见

显然,sdl2头文件和库文件必须让编译器可以找到, 可以把头文件目录添加到INCLUDE环境变量,将库文件目录添加到LIB环境变量 在MSYS2控制台执行(注意目录得使用Windows格式 C://...而非 /c/...):

export INCLUDE=$INCLUDE";<sdl2头文件目录>"
export LIB=$LIB";<sdl2库文件目录>"

也可以在cmd执行vcvarsall.bat后使用set命令添加

2.配置sdl2对pkg-config可见

另外,sdl2除了得对msvc可见,还要对pkg-config可见,方法如下(实测可用,但不知道有没有更好的方法) - 新建sdl2.pc 文件,编辑如下

prefix=你的sdl2所在目录(目录格式/c/...而非C://...)
libdir=${prefix}/lib/x86
includedir=${prefix}/includeName: sdl2
Description: sdl2
Version: 2.0.12
Libs: -L${libdir} -lsdl2

prefix设置为的sdl2目录(目录格式/c/...而非C://...),Version设置为你的sdl2版本

  • 查看PKG_CONFIG_PATH环境变量,将sdl2.pc拷贝到其中任一目录(如<msys2安装目录>/usr/lib/pkgconfig)
echo $PKG_CONFIG_PATH

3.启用sdl2,编译

最后,使用--enable-sdl2启用sdl2

./configure --enable-sdl2 --toolchain=msvc
make

其他库的使用方法应该类似

问题

1.源码字符集不匹配的问题

924f3cb9d42222b66a3e9c45e423b5ae.png

b2fce9599d2976c20739199c69c8151b.png

d9de237c5ed27968e0a355232c7a8de9.png

msvc2019

因为msvc2019默认以utf-8编码读取源码,而./configure生成的config.h包含gbk字符 解决方法: - 将config.h以gbk编码打开(notepad++或vscode),复制全部,再以utf-8打开粘贴覆盖; - 或者,干脆将utf-8下乱码的字符删除

msvc2013

msvc2013默认以gbk编码读取源码,所以方法同msvc2019,不过恰好相反,要确保不出现gbk编码无法识别的字符

2.编译出错,timespec未定义

timespec结构体是C11标准定义的,包含在time.h头文件中,msvc2013可能没有完全实现这个标准。 幸好ffmpeg只是借用了这个结构体,而没有用到相应的函数, 所以我们手动定义一下好了:

#ifndef _MY_TIMESPEC_
#define _MY_TIMESPEC_ 
struct timespec{time_t tv_sec;  // Seconds - >= 0long   tv_nsec; // Nanoseconds - [0, 999999999]};
#endif

将它拷贝到源码中,重新make

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】阿里技术专家详解 DDD 系列 第一讲- Domain Primitive

导读 对于一个架构师来说&#xff0c;在软件开发中如何降低系统复杂度是一个永恒的挑战&#xff0c;无论是 94 年 GoF 的 Design Patterns &#xff0c; 99 年的 Martin Fowler 的 Refactoring &#xff0c; 02 年的 P of EAA &#xff0c;还是 03 年的 Enterprise Integratio…

wince编译报错

新建了工程&#xff0c;加入之前完整的BSP&#xff0c;怎么也编译不过&#xff0c;提示&#xff1a; [01:0000009403:ERRORE] NMAKE : U1073: dont know how to make C:\WINCE600\OSDesigns\xyjhht30\xyjhht30\Wince600\SMDK6410_ARMV4I\cesysgen\sdk\lib\ARMV4I\retail\ddraw.…

服务器怎么把信息发送给用户,java中怎么用tcp/ip将服务器的消息发送给多个用户...

java中怎么用tcp/ip将服务器的消息发送给多个用户关注:253 答案:2 mip版解决时间 2021-01-31 01:26提问者╬═掵中注定2021-01-30 20:03java中怎么用tcp/ip将服务器的消息发送给多个用户最佳答案二级知识专家往事叫我剪短发2021-01-30 20:09你服务器accept方法后是不是会得到…

VS2005 .vs. Orcas

这两天正在开发自己的一套信息管理系统&#xff0c;开发环境采用 VS2005 C# XP。由于习惯用Dreamweaver 布局&#xff0c;这可好&#xff0c;在DW中布局完成之后&#xff0c;在VS中就完全走形了。郁闷!刚好龙卷风版 Vista 有了&#xff0c;那就装一个试试IIS7和 Orcas。Good&…

解析NK.BIN

最近做NBOOT&#xff0c;EBOOT&#xff0c;对TOC参数不是很明白&#xff0c;老大说得先熟悉一下NK.bin。故找到以下好文&#xff0c;对NK.bin有了一个深入的了解。感谢作者。 study NK.bin format The information from WINCE500\PRIVATE\WINCEOS\COREOS\NK\TOOLS\ROMIMAGE\VI…

查询链接服务器信息,SQL Server链接服务器

SQL Server提供链接到另一个服务器的选项。这通常被用来连接到其他SQL Server数据库&#xff0c;但它也可以被用来连接到一个Microsoft Access数据库。这是通过链接服务器节点成为可能。链接服务器节点可以连接到另一个数据库&#xff0c;通常/通常在不同的机器上运行&#xff…

【转】阿里技术专家详解DDD系列 第二讲 - 应用架构

填坑。谢谢大家对这个系列的期待&#xff0c;持续更新&#xff0c;欢迎关注此账号。 第一篇内容附地址&#xff1a; 阿里巴巴淘系技术&#xff1a;阿里技术专家详解 DDD 系列 第一讲- Domain Primitive​zhuanlan.zhihu.com 架构这个词源于英文里的“Architecture“&#xff…

【转】应用架构之道:分离业务逻辑和技术细节

架构 什么是架构&#xff1f; 关于架构这个概念很难给出一个明确的定义&#xff0c;也没有一个标准的定义。 硬是要给一个概述&#xff0c;我认为架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。 架构始于建筑&#xff0c;是因为人类发展&#xff08;原始人自…

ARM9之NAND FLASH总结

/*author----->Armking*/ /*data----->2008年9月2*/ /*ps:本人总结&#xff0c;备于日后查阅&#xff0c;如若转载&#xff0c;请注明出处*/ /*QQ:382750150*/ 写于篇头&#xff1a; 终于又开始接着学习了&#xff0c;只是不知道为什么JTAG又连不上目标板了&#xff0c;如…

【转】SD-WAN,到底是什么*****

作为一个热门概念&#xff0c;SD-WAN近年以来频繁地出现在我们的视野当中。 很多人说&#xff0c;它是未来最具发展潜力的通信技术之一&#xff0c;极具商业价值。 行业里的老牌通信设备商和运营商对它一致看好&#xff0c;新兴创业企业也把它视为千载难逢的风口机遇&#xff0…

ffmpeg 截图太模糊了_PPT图片模糊?导师说放大!

今日分享图片智能放大●●●●重庆大学PPT图片太模糊了&#xff0c;要用原图&#xff01;放大&#xff0c;放大导师如是说&#xff0c;小硕表示&#xff0c;图片本就这样这咋办&#xff1f;不愁&#xff0c;稳住接着看在做PPT时还是做论文时想用某张图片&#xff0c;但是直接拉…

【转】全了!临港四镇最新对口地段小学,中学都在这里,看看你的孩子能读哪个学校

临港的家长们关于自己的孩子就读哪个学校&#xff0c;家长们一直都很关心和关注&#xff0c;每个家长对孩子的教育很是重视&#xff0c;有部分家长买临港的房子就冲着学区去的&#xff0c;临港的优质教育资源一直是被居民所称赞的&#xff0c;学校也没家长失望&#xff0c;个别…

【转】Azure Az-900认证 04——-考取AZ900所有知识点总结--获取证书!

结合最近所做的模拟题&#xff0c;把一些容易考的知识和概念重新回顾记录一下。标红的字要注意一下&#xff0c;有可能这几个简单的字&#xff0c;就是最能概括这个概念的关键点&#xff0c;个人在回顾的时候把这些点红色标出来了&#xff0c;会在题干中以不同的案例形式来考察…

怎么用vc采集ni卡数据_8bit,200MS/s 低成本模拟输入高速采集卡FCFR-PCI9850

FCFR-PCI98508bit,200MS/s 低成本模拟输入高速采集卡FCFR-PCI9850&#xff08;简称PCI9850&#xff09;是低成本高速数字化化仪&#xff0c;AD分辨率8bit&#xff0c;AD采样率200MS/s&#xff0c;硬件FIFO缓存32M字节&#xff0c;采集卡支持50MS/s的高速连续采集&#xff0c;触…

S3C6410启动模式介绍

目前的ARM处理器都支持多种启动模式&#xff0c;S3C6410和以前的Samsung的ARM处理器一样&#xff0c;通过外部管脚OM[4:0]的拉高拉低来决定是从哪个存储设备上启动。我认为S3C6410的User Manual并没有说的很清楚&#xff0c;所以我在最开始使用的时候&#xff0c;也对其启动模式…

如何用木板做桥_如何辨别使用的公园椅是否需要保养

如何辨别使用的公园椅存在哪些问题新城市公园椅小编与您分享&#xff0c;每一项事物都会有它的使用寿命&#xff0c;公园椅也不例外。公园椅使用有几年后后&#xff0c;我们通过公园椅的哪些表现来发现公园椅存在哪些隐患呢&#xff1f;通过观察、触摸、按压这三种方式来发现公…

c语言删除文件remove_Python中的文件和目录操作

对于文件和目录的处理&#xff0c;虽然可以通过操作系统命令来完成&#xff0c;但是Python语言为了便于开发人员以编程的方式处理相关工作&#xff0c;提供了许多处理文件和目录的内置函数。重要的是&#xff0c;这些函数无论是在Unix、Windows还是Macintosh平台上&#xff0c;…

漏洞:Client ReDos From Regex Injection

漏洞描述&#xff1a; 扫描漏洞如下&#xff1a;代码&#xff1a; // In IE6, the hash fragment and search params are incorrect if the // fragment contains ?. getSearch: function() { var match this.location.href.replace(/#.*/, ).match(/\?./); …

WinCE Boot方式及 Bootloader架构概述

Bootloader的概念就是一个用于引导的loader&#xff0c;在系统上电的时候最先被运行&#xff0c;然后对硬件平台做最基本的初始化&#xff0c;最后把操作系统加载起来。不同的嵌入式操作系统都有自己的Bootloader&#xff0c;但是本质功能都是一样的。 在WinCE中用的最多的就是…

静物摄影用光技巧_摄影技巧:摄影如何用光?摄影大师总结的10点,非常受用!...

点击上方蓝字关注「摄影技巧入门教程」ID&#xff1a;sheying116找到右上角点击?... 设为星标/置顶 丨摄影技巧丨丨摄影入门丨丨摄影教程丨丨摄影图片丨摄影技巧&#xff1a;光线的运用在摄影中至关重要&#xff0c;但很多摄影新手却不知道该如何用光&#xff0c;今天我们就来…