当年小白入门,现在再看,确实需要改改了,再优化一下排版。添加或修改内容,用红色字体标记——2021/1/14
一、 下载
Win10 + VS2010 + FFmpeg + 64位
下载FFmpeg地址如下: https://ffmpeg.org/download.html#build-windows
绿色的Download下载最新的,但是为了稳定,还是选择以前的常用版本,且下载编译好的。如图所示:
进入previous builds ,本机下载的是64位,大家因需求而异。
选择Previous Builds,就是选择之前的版本,没必要搞最新的。
点击之后,目录结构如下所示:
dev里面包含include 和 lib库,include里面是头文件,lib库包含所有函数和方法。
Shared里面是 dll的动态库,运行项目执行文件*.exe时,需要将对应的dll放入*.exe同级目录中。
注意两个版本下载要一致。 这里,我下载的版本是3.2.4 :
二、 配置文件
打开VS2010,创建一个win32控制台应用程序,可包含预编译头。
在项目中,添加三个文件,分别是 : include lib bin
解压下载的dev压缩包,① 将include中的文件全部复制到项目的include中;
② 将lib中的.lib文件全部复制到项目的lib中;
③ 解压shared压缩包,将bin中的.dll文件,全部复制到项目中的bin文件中。
不清楚过程的,请看下面1-3图。
将项目改为64位debug和release,然后下面的操作在release下进行。也可以在debug下进行。
添加:项目->属性->VC++目录->常规->附加包含目录: 填写相对路径
include与*.sln文件 属于同一级
lib与*.sln文件 属于同一级
添加:项目->属性->链接器->输入->附加依赖项:
红框内容,避免屏幕一闪而过;绿框内容为添加的初始化。
代码如下:
#include "stdafx.h"
#include<iostream>
extern "C"
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}
int _tmain(int argc, _TCHAR* argv[])
{
av_register_all();
system("pause");
return 0;
}
三、开始编译工程
① 编译,出错了!莫方!
1>d:\practice\vs2010test\test\include\libavutil\common.h(35): fatal error C1083: 无法打开文件:“inttypes.h”: No such file or directory
提示找不到 inttypes.h。
网上下载此文件,然后放进VS的安装路径。
② 又出现新错误:
该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
解决方法:
在Project -> Properties -> Configuration Properties -> C/C++ -> Advance 的 Disable Specific Warnings 中添加相应的警告编号:4819;
③ 又又双出现问题了:
哦,原来是前面设置的时候,搞错了。
④ 又又双叒这个错误,我都方了。但是还是要有信心,继续干掉它!不过现在还是先放一下。
四、 debug
上面的过程是在release下进行的,下面改为debug,项目中的配置修改同上。
① 结果又出现了这个问题。继续找方法:
解决方法一: 将dll 都复制到与bin同级的debug文件夹中。结果失败。
解决方法二: 将dll 都复制到test->x64下的debug文件夹中。结果通过。同理,dll也需要复制到test->x64下的release文件夹中。
一个完美的黑框!!!激动的很!!!
再添加两行代码,查看一下版本号:
至此,debug算是比较完美的收官。
五、 上面的release版本,依然有问题,现修改release版本下的代码,如下:
经查找,代码修改如下:
#include "stdafx.h"
#include<iostream>
extern "C"
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "afxmt.h"
}
int _tmain(int argc, _TCHAR* argv[])
{
avcodec_register_all();
av_register_all();
system("pause");
return 0;
}
新错误:
#error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
网上查找修改以下两个地方,但是我修改后,又出现了新问题,还真是问题不断呀!
然后我也无能为力了,毕竟也是新手,等以后积累更多知识的时候,也许就能轻松解决了。
debug可以通过,但release又出问题,解决办法:https://blog.csdn.net/qq_34732729/article/details/90076003