编译vs下可调试的ffmpeg和x264

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

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-142.dll > libx264-142.def
lib /machine:X86 /def:libx264-142.def

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

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

时间: 2024-10-31 19:39:20

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

linux下mplayer(ffmpeg)通过x264解码播放高清h264视频

系统环境: Linux inbank-GZ 2.6.24-16-generic #1 SMP Thu Apr 10 13:23:42 UTC 2008 i686 GNU/Linux Ubuntu 8.04 Genuine Intel(R) CPU   1250  @ 1.73GHz  * 2 1G内存 目标:能用mplayer播放H264格式的高清视频 下载相关软件 Mplayer1.1版本(包含了ffmpeg) 各类解码包codes x264 yasm + faac + faad 可以在这里下

linux 编译ffmpeg 支持x264, x265

1. 前言 本教程涉及的ffmpeg, x264, x265 2. 环境依赖 2.1 删除系统中安装的ffmpeg等库 <span style="font-size:14px;">sudo apt-get --purge remove ffmpeg mplayer x264 x265</span> 2.2 安装依赖库 <span style="font-size:14px;">sudo apt-get update sudo ap

FFmpeg和X264的交叉编译环境

在下载好了FFmpeg和X264的源码包之后,在Linux下进行安装的基本流程就是切换到其源码的根目录,然后以此执行以下命令.基本上所有的开源源码包的默认编译安装都是这三步. ./configure make make install三部曲 值得注意的是,如果对于./configure如何配置不清楚 则通过执行./configure --help获取帮助 对于FFmpeg和X264的编译与安装在FFmpeg的Wiki页面上有详细的帮助,下面贴上其地址 FFmpeg的Wiki主页:http://t

indows下PHP通过ffmpeg给上传的视频截图详解

windows下PHP通过ffmpeg给上传的视频截图详解,php_ffmpeg.dll安装下载,找了很久php_ffmpeg.dll的下载地址和应用,发现有用的资源很少,现在问题解决了,贴出来跟大家分享一下: 首先要安装PHP的ffmpeg扩展,我们需要php_ffmpeg.dll文件和一些其他的辅助文件,        这里整理了一下提供给大家: ffmpeg-php-win32-all.rar: 解压后你将得到5个文件,将avcodec-51.dll, avformat-51.dll, a

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

记:不常发生的事件内存泄漏现象 想必有些朋友可能也常常使用事件,但是很少解除事件挂钩程序也没有听说过内存泄漏之类的问题.幸运的是,在某些情况下,的确不会出问题,很多年前做的项目就跑得好好的,我们静态可以做一个实验来再次验证下.为了验证这个问题,我一度怀疑自己代码写错了,甚至照着书上(网上)例子写也无法重现事件引起内存泄漏的问题,难道教科书说错了么? 首先来看看我的代码,先准备2个类,一个发起事件,一个处理事件: class A { public event EventHandler ToDoSo

将libvex移植到Visual Studio编译平台下的经验总结

1. 两难 将libvex从Linux移植到Windows,移植工作聚集于Cross-Compiler,而不是预料的Cross-Platform. VC++ Compiler到目前为止只支持C89标准,而这个标准规定,变量必须在代码块(即通过大括号包围起来的代码块)的最前面声明,参考 http://stackoverflow.com/questions/13308944/how-to-simulate-c99-in-visual-studio-for-variables-declaration

批量编译目录下文件的Makefile

1.多C文件生成各自可执行文件的Makefile如果一个目录下有很多C文件,且每个C文件都能生成一个独立的可执行文件,那么想全编译这些C文件并生成各作的可执行文件,在该目录下编写一个Makefile文件,就能做到时. #定义所需变量C = gccCFLAGS = -Wall -O -g -o #编译链接-oSRCS =$(wildcard *.c)OBJS =$(patsubst %.c,%,$(SRCS)).PHONY:all cleanall:$(OBJS)%:%.c        $(CC

ffmpeg支持x264插件

1 ffmpeg安装x264插件 2 要安装x264模块首先要先装nasm 3 安装脚本如下[复制即可使用] #!/bin/bash yum -y install epel-release  && yum -y install git wget                                            #下载git,wget echo $? if [ $? == 0 ];then                                          

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

go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][1]: 首先得装一个 windows 下的 gcc 开发环境,我用了 [msys2][3] . 需要配置一个快点的源,我用[中国科技大学的源][4]. 安装 gcc 工具链: pacman -S mingw-w64-x86_64-toolchain (注意这里有个坑, msys64 根目录有两个 m