2019年3月开始,为了将音视频编解码功能集成到Cocos2d-x中,开始接触到FFmpeg;

当时开发环境还在Mac下,编译FFmpeg相比现在用Windows平台要方便的多;

最近,公司内部有个Unity项目中的功能需要用到音视频编解码功能;

新项目目标是移动平台,需要跨平台支持;选定FFmpeg作为音视频编解码库+自行封装C++ Api方便C#层调用。

新项目的开发平台是Windows;所以首先需要的就是编译Windows版本的FFmpeg动态库;

2019年接触FFmpeg时,源码编译的平台包括Mac OS、iOS和Android;没有在Windows平台编译过;

当初为了编译FFmpeg源码,也是花了不少时间在网上搜索各种编译脚本;

两年多的时间过去了,再次需要用到相关技术却发现,之前并没有留下多少可以供重新捡起来,并可快速、全面上手的文档;有的只是零星、琐碎的一些笔记和浏览器中保存的书签;

下面开始进入标题正文

FFmpeg源码提供了configure脚本,用来配置功能模块并生成Makefile脚本;

所以第一步是需要一个shell环境,官方文档中用的是MSYS2;这里记录的就是使用MSYS2的步骤;

1、安装MSYS2;

MSYS2网站首页提供了安装包下载、包管理器的简单使用方法;

这里假设使用默认路径安装:C:\msys64

官网的步骤,在"MSYS MinGW 64bit"终端中,make、gcc等工具应该就可以使用了;

2、MSYS2中的必要工具:nasm、pkg-config

从开始菜单中打开【MSYS2 64bit】-【MSYS2 MinGW 64bit】,依次执行下面的命令:

pacman -S nasm pke-config

3、MSVC工具链环境变量

这里需要安装Visual Studio C++开发环境(不赘述);
打开“x64 Native Tools Command Prompt for VS 2019”终端,并执行命令:

C:\msys64\msys2_shell.cm -mingw64 -full-path

4、在新打开的MingW64终端中切换到FFmpeg源码所在目录,并依次执行命令:

./configure --toolchain=msvc --prefix=./output

make -j6

make install

如果都顺利的话,默认的静态库会安装在FFmpeg-src/output目录下;

动态库: 添加选项 --enable-shared

./configure --toolchain=msvc --enable-shared --prefix=./output

make -6

make install

参考:
https://www.msys2.org/

https://www.ffmpeg.org/platform.html#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows

FFmpeg笔记:使用MSVC工具链编译Windows版本静态库、动态库的更多相关文章

  1. 编译 Windows 版本的 Unity Mono(2017-03-12 20:59)

    上一篇说了如何编译 Android 下的 mono,这里简要说下编译 windows 版本的 mono,就是 mono.dll,Unity 版本只有一个 mono.dll,官方的 mono,好几个可执 ...

  2. Golang调用windows下的dll动态库中的函数 Golang 编译成 DLL 文件

    Golang调用windows下的dll动态库中的函数 package main import ( "fmt" "syscall" "time&quo ...

  3. 静态库动态库的编译、链接, binutils工具集, 代码段\数据段\bss段解释

    #1. 如何使用静态库 制作静态库 (1)gcc *.c -c -I../include得到o文件 (2) ar rcs libMyTest.a *.o 将所有.o文件打包为静态库,r将文件插入静态库 ...

  4. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...

  5. C++开发新版本vs使用旧版本vs编译的静态库动态库

    关于vs潜在的升级问题概述 (Visual C++)查看官网的介绍:潜在的升级问题概述 (Visual C++).主要问题: 1. 如果使用 /GL(全程序优化)进行编译,则生成的对象文件只能使用生成 ...

  6. windows库的创建和使用:静态库+动态库

    windows库的创建和使用:静态库+动态库   一.静态库的创建和使用 1. 静态库创建 (1)首先创建projecttest,測试代码例如以下: 1) test.h void test_print ...

  7. Golang调用windows下的dll动态库中的函数

    Golang调用windows下的dll动态库中的函数 使用syscall调用. package main import ( "fmt" "syscall" & ...

  8. windows 创建和调用 动态库,静态库

    windows创建和调用静态库 // MathFuncsLib.h namespace MathFuncs { class MyMathFuncs { public: // Returns a + b ...

  9. windows 静态和动态库

    c++中共有两种库:1.动态链接库LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.(这 ...

随机推荐

  1. [luogu2973]driving out the piggies 驱逐猪猡【高斯消元+概率DP】

    看到题面的那一刻,我是绝望的ORZ 图论加概率期望加好像不沾边的高斯消元???我人直接傻掉 还没学过概率期望的我果断向题解屈服了(然后还是傻掉了两节课来找线性方程.. Description 奶牛们建 ...

  2. 在Vue前端界面中,几种数据表格的展示处理,以及表格编辑录入处理操作。

    在Vue前端项目中,我这里主要是基于Vue+Element的开发,大多数情况下,我们利用Element的表格组件就可以满足大多数情况的要求,本篇随笔针对表格的展示和编辑处理,综合性的介绍几款表格组件的 ...

  3. 确定两串乱序同构 牛客网 程序员面试金典 C++ Python

    确定两串乱序同构 牛客网 程序员面试金典 C++ Python 题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串中 ...

  4. nodejs:使用puppeteer在服务器中构建一个获取电影电视剧剧集的接口

    首先我们看下数据来源: 来源于这个网站:https://z1.m1907.cn/ 可以说这个网站上能找到很多你想看的很多电影或电视剧,最重要的是很多电影电视剧在别的网站是收费的,但是在这里看是免费的, ...

  5. linux 安装rabbitmq

    1.安装rabbitmq会依赖erlang.socat.unixodbc 下载 unixODBC-2.3.7.tar.gz ,创建路径/usr/local/unixODBC-2.3.7,解压到该路径下 ...

  6. oracle 数据库修改端口号1521

    1.关闭监听 2.修改配置文件,port=1933 #vi $ORACLE_HOME/network/admin/listener.ora 3.登录并查看local_listener参数,因为使用的是 ...

  7. Docker进阶一:网络篇

    理解Docker0 查看本地ip ip addr [root@VM-0-6-centos ~]# ip addr #本机回环地址 1: lo: <LOOPBACK,UP,LOWER_UP> ...

  8. 模块化开发 | es6模块暴露与引入

    CommonJS模块开发 CommonJS定义 每个文件就一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. 私有作用域不会污染全局作用域. 模块可加载多次, ...

  9. 用 Python 修改微信(支付宝)运动步数,轻松 TOP1

    用 Python 修改微信(支付宝)运动步数,轻松 TOP1 项目意义 如果你想在支付宝蚂蚁森林收集很多能量种树,为环境绿化出一份力量,又或者是想每天称霸微信运动排行榜装逼,却不想出门走路,那么该py ...

  10. SpringCloud 2020.0.4 系列之 Stream 消息广播 与 消息分组 的实现

    1. 概述 老话说的好:事情太多,做不过来,就先把事情记在本子上,然后理清思路.排好优先级,一件一件的去完成. 言归正传,今天我们来聊一下 SpringCloud 的 Stream 组件,Spring ...