以前随手记的笔记,翻出来,整理下哈

ffmpeg 在windows上的编译还是比较麻烦的,而且如果mingw-gcc编译的话,是无法在vs下调试的

所以以前刚开始玩ffmpeg的时候,费了一些功夫,用vs编译调试ffmpeg,当然在mingw下调试也是可以的。

由于是之前的笔记,所以有些地方不是很详细,主要记录了一些关键的地方。

也可以直接下载编译配置好的vs2013工程

一、准备工具

  1. msysgit 环境,https://github.com/msysgit/msysgit/

  2. 然后下载yasm,pkg_config,glib的windows版,放置于bin目录下

   yasm 可以直接从官网下载,下载Win64 .exe 版本(vs版本有问题). 下载后改名为yasm.exe

     pkg_config, http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.23-3_win32.zip

     glib,http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.18/glib_2.18.4-1_win32.zip

二、编译ffmpeg

  1. 搜索mingw中的link.exe, 改名或删掉,因为和vs的link冲突

  2.

export PKG_CONFIG_PATH=/mingw/lib/pkgconfig:/usr/local/lib/pkgconfig

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"

  3. configure ffmpeg,默认的编译参数是O2优化,这样不太方便调试

 ./configure --enable-shared --enable-memalign-hack --enable-gpl --enable-libx264 --enable-postproc --prefix=./vs2013_build/Release --toolchain=msvc --extra-cflags=-Id:/code/libx264 --extra-ldflags=-LIBPATH:d:/code/libx264

  尝试禁用优化,编译时会产生大量错误,所以使用O1优化,这样调试的时候还是不会被优化太多

 ./configure --enable-shared --enable-memalign-hack --enable-gpl --enable-libx264 --enable-postproc --prefix=./vs2013_build/Debug --toolchain=msvc  --disable-optimizations --disable-stripping  --enable-debug --optflags='-O1 -Zo -arch:SSE2' --extra-cflags='-Gy -MDd -Id:/code/libx264' --extra-ldflags='-OPT:REF -DEBUG   -VERBOSE -LIBPATH:d:/code/libx264'

O1 优化,会把local variable优化掉,其他应该没太大影响

-Zo参数 (vs2012中是/d2Zi+) 允许运行在优化模式下调试(注意不能删除config.mk中/Z7参数)

/Gy Enables function-level linking.
-arch::SSE2 解决SSE MMX等指令无法link.

四、 编译好的lib嵌入到VS工程中,还需要做些修改

error C2054: expected '(' to follow 'inline'
error C2085: 'av_cmp_q' : not in formal parameter list
直接改project->[setting]->[c/c++]->Preprocessor definitions:编辑框里输入inline=__inline即可。
inline=__inline

还需要定义
snprintf=_snprintf

ffplay.c 中cmdutils.c print_all_libs_info
注释
//PRINT_LIB_INFO(avresample, AVRESAMPLE, flags, level);
//PRINT_LIB_INFO(postproc, POSTPROC, flags, level);

修改 config.h
#define HAVE_STRUCT_POLLFD 1

五、编译x264

  msysgit 以-enable-win32thread 参数编译就不会依赖libgcc 和pthread

./configure --enable-shared --host=i686-pc-mingw32
--enable-static --enable-win32thread
pexports libx264-.dll > libx264-.def
lib /machine:X86 /def:libx264-.def

msys编译的话,会有个问题是gcc版本太老了。

另外msysgit,中可能需要删除configure中一些gcc编译参数 -Wl,--nxcompat -Wl,--dynamicbase,否则可能导致gcc无法识别。报错为 no working c compiler 的错误

编译vs下可调试的ffmpeg和x264的更多相关文章

  1. 编译Android下可用的FFmpeg+x264

    编译Android下可用的FFmpeg+x264 编译x264: 下载最新版的x264 ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 1.解压 ...

  2. 【FFmpeg】Windows下64位ffmpeg编译

    本文主要记录在64位Windows 7下,编译64位ffmpeg的过程. 1.资源准备 (1). MSYS http://sourceforge.net/projects/mingwbuilds/fi ...

  3. linux 编译ffmpeg 支持x264, x265

    1. 前言 本教程涉及的ffmpeg, x264, x265 2. 环境依赖 2.1 删除系统中安装的ffmpeg等库 sudo apt-get --purge remove ffmpeg mplay ...

  4. FFmpeg和X264的交叉编译环境

    在下载好了FFmpeg和X264的源码包之后,在Linux下进行安装的基本流程就是切换到其源码的根目录,然后以此执行以下命令.基本上所有的开源源码包的默认编译安装都是这三步. ./configure ...

  5. Arm-Linux 移植 FFMPEG库 + x264

      背景: ffmpeg 中带有264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx26 ...

  6. ffmpeg 和 x264的参数对照

    ffmpeg 和 x264的参数对照   x264 ffmpeg 说明 命令行 字段 命令行 字段 qp qp_constant cqp cqp 固定量化因子.取值范围0到51. 经常取值在20-40 ...

  7. Release编译模式下,事件是否会引起内存泄漏问题初步研究

    题记:不常发生的事件内存泄漏现象 想必有些朋友也常常使用事件,但是很少解除事件挂钩,程序也没有听说过内存泄漏之类的问题.幸运的是,在某些情况下,的确不会出问题,很多年前做的项目就跑得好好的,包括我也是 ...

  8. FFmpeg and x264 Encoding Guide

    https://trac.ffmpeg.org/wiki/Encode/H.264 FFmpeg and H.264 Encoding Guide Contents Constant Rate Fac ...

  9. go 工具链目前[不支持编译 windows 下的动态链接库]解决方案

    go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...

随机推荐

  1. win10 新增删除文件不刷新

    实际上是桌面图标缓存出问题,以下是一个简单动作即可解决问题. 按Win+R键打开“运行”窗口,输入如下命令后按回车键执行: ie4uinit -show 立竿见影,效果同360,魔方等工具软件,可参考 ...

  2. Tomcat 环境变量配置

    1.变量和常量 i 和 0 2.环境变量 cmd >set 查看所有环境变量 %PATH% 系统指定可执行文件的搜索路径,可以是 .exe .bat String path=“C:\WINDOW ...

  3. (并查集)The Suspects --POJ --1611

    链接: http://poj.org/problem?id=1611 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...

  4. Scala类型检查与转换

    Scala类型检查与转换 isInstanceOf:检查某个对象是否属于某个给定的类. asInstanceOf:将引用转换为子类的引用. classOf:如果想测试p指向的是一个Employee对象 ...

  5. hdu 5000 共存问题->背包

    http://acm.hdu.edu.cn/showproblem.php?pid=5000 每只羊有n个属性 下面n个数字表示每个属性的值范围为[ 0, T[i] ] 对于羊圈里的a羊和b羊,若a羊 ...

  6. (原创)Hibernate 使用过程中(尤其是多对多关联中的级联保存和级联删除)的注意事项(基于项目的总结)

    一.先上知识点: 1.hibernate多对多关联关系中最重要的参数是(基于配置文件xxx.hbm.xml文件形式): 1):inverse属性,如果设置inverse=“true”就代表让对方参与维 ...

  7. 一个CSV文件解析类

    import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.ut ...

  8. ASP.Net Core 2.2 MVC入门到基本使用系列 (一)

    本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...

  9. asp.net Ibatis.net 批量插入数据ORACLE

    在开发中我们有时会遇到需要批量插入数据,最普通的就是每次 插入一条.但是当数据量大道一定的地步会很影响性能.下面例子示范了ibatis.net批量插入 ibatis.net 的XML文件里面使用ite ...

  10. .net core Swagger

    Startup中的  ConfigureServices //注册 Swagger services.AddSwaggerGen(sg => { sg.SwaggerDoc("refu ...