编译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-.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的更多相关文章
- 编译Android下可用的FFmpeg+x264
编译Android下可用的FFmpeg+x264 编译x264: 下载最新版的x264 ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 1.解压 ...
- 【FFmpeg】Windows下64位ffmpeg编译
本文主要记录在64位Windows 7下,编译64位ffmpeg的过程. 1.资源准备 (1). MSYS http://sourceforge.net/projects/mingwbuilds/fi ...
- linux 编译ffmpeg 支持x264, x265
1. 前言 本教程涉及的ffmpeg, x264, x265 2. 环境依赖 2.1 删除系统中安装的ffmpeg等库 sudo apt-get --purge remove ffmpeg mplay ...
- FFmpeg和X264的交叉编译环境
在下载好了FFmpeg和X264的源码包之后,在Linux下进行安装的基本流程就是切换到其源码的根目录,然后以此执行以下命令.基本上所有的开源源码包的默认编译安装都是这三步. ./configure ...
- Arm-Linux 移植 FFMPEG库 + x264
背景: ffmpeg 中带有264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx26 ...
- ffmpeg 和 x264的参数对照
ffmpeg 和 x264的参数对照 x264 ffmpeg 说明 命令行 字段 命令行 字段 qp qp_constant cqp cqp 固定量化因子.取值范围0到51. 经常取值在20-40 ...
- Release编译模式下,事件是否会引起内存泄漏问题初步研究
题记:不常发生的事件内存泄漏现象 想必有些朋友也常常使用事件,但是很少解除事件挂钩,程序也没有听说过内存泄漏之类的问题.幸运的是,在某些情况下,的确不会出问题,很多年前做的项目就跑得好好的,包括我也是 ...
- FFmpeg and x264 Encoding Guide
https://trac.ffmpeg.org/wiki/Encode/H.264 FFmpeg and H.264 Encoding Guide Contents Constant Rate Fac ...
- go 工具链目前[不支持编译 windows 下的动态链接库]解决方案
go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...
随机推荐
- spring3 hibernate4整合后无法查询数据库
spring3和hibernate4整合后无法查询数据库,一方面是因为已经spring3中没有对hibernate4 HibernateTemplate的支持,另外一个就是需要在hibernate的配 ...
- 求解1^2+2^2+3^2+4^2+...+n^2的方法(求解1平方加2平方加3平方...加n平方的和)
利用公式 (n-1)3 = n3 -3n2 +3n-1 设 S3 = 13 +23 +33 +43 +...+n3 及 S2 = 12 +22 +32 +42 +...+n2 及 S1 = 1 +2 ...
- bootstrap-treeview 关于checkbox选择框不显示的问题
bootstrap-treeview.js 1.0.2 不支持checkbox,最后使用 bootstrap-treeview.js 1.2.0 解决此问题.
- 用 PHP 编写 http 服务器
概述 众所周知,我们一般使用 PHP 开发Web程序时需要使用到比如Apache或Nginx等Web服务器来支持,那么有没有办法直接使用PHP开发HTTP服务器,答案当然是可以的,最近看了一遍Work ...
- Tomcat服务器(一)
一.tomcat目录中重要的文件: bin 存放启动和关闭的脚本 conf 存放配置文件 logs 日志文件 webapps 存放部署的项目 work 工作目录 Web应用开发好后,若想供外界访问, ...
- Android SDK目录结构
Android版本下载:从4.0到8.0版本: Android SDK目录结构图: sdk全称:software develop kits 软件开发工具集 add-ons:Google API map ...
- oracle 11g Enterprise Manager配置失败
Enterprise Manager以下简称em,Database Configuration Assistant简称DBCA. 病症 监听程序未启动或数据库服务未注册到该监听程序.启动该监听程序并注 ...
- MYC编译器源码之词法分析
前文 .NET框架源码解读之MYC编译器 和 MYC编译器源码分析之程序入口 分别讲解了 SSCLI 里示例编译器的架构和程序入口,本文接着分析它的词法分析部分的代码. 词法解析的工作都由Tok类处 ...
- SignalR简单封装
需求:Asp.Net MVC 开发客户端,实现与服务器端实时通信. 众所周知,Web开发是基于http的请求响应模型,每次刷新都需要客户端(浏览器)主动发起请求,那么,这个问题怎么解?Asp.Net ...
- WebAPI+Html跨域时对session的支持
1.Global.asax中添加对Session的支持,重新Init方法: public override void Init() { this.PostAuthenticateRequest += ...