Windows(x64)编译FFMPEG-2.0.1

一、引言

公司需要做网络视频传输的相关项目,初步选定用这么几个东西FFMPEG,ORTP,Live555这么几个东东。研究了也有一个月了,把一些心得写出来,这篇文章主要介绍FFMPEG在windows上的编译。

网上针对FFmpeg在windows上的编译帖子很多,根据编译在过程中还是出现了很多问题,可能是由于版本或者其他的一些问题吧。这里记录了我的编译过程,供大家查考。

感谢下面的文章,主要根据这几篇文章来提取的内容:

http://blog.chinaunix.net/uid-20718335-id-2980793.html

http://blog.chinaunix.net/uid-517401-id-353377.html

http://blog.csdn.net/henryjee/article/details/6576535?reload

http://www.chinavideo.org/forum.php?mod=viewthread&tid=10413

http://www.cnblogs.com/chsin/archive/2013/04/15/3022299.html

http://www.cnblogs.com/zyl910/archive/2012/08/08/c99int.html

我将所有需要的下载的库和文件在我的资源中,FFMPEG2.0.1中下载。

http://download.csdn.net/detail/xi52qian/5983311

二、相关环境

windows7 x64旗舰版。

VS2010(打了SP1补丁)

Mingw-get-inst-20120426

yasm-1.2.0-win64

ffmpeg-2.0.1

lame-3.99.5

x264

xvidcore-1.3.2

faad2-2.7

faac-1.28

vo-aacenc-0.1.2

opencore-amr-0.1.3

vo-amrwbenc-0.1.2

三、编译前准备

您最好新建一个目录专门用来保存以下下载的文件。
1 下载 MinGW 和 MSYS
    MinGW(Minimalist GNU on Windows):一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库。
    到:http://sourceforge.net/projects/mingw/ 去下载即可
    A 点击“DownLoad mingw-get-inst-...exe”
    B 切换到页面:download? Check your browser‘s security bar, or try a direct link, or try another mirror.
    C 点击“direct link”下载类似:mingw-get-inst-20120426.exe 的文件
    提示:msys此处就不用再下载了,mingw-get-inst-20120426.exe 中已经包含了msys1.0,后面安装的时候就可以看到该选项。
2 下载 yasm(汇编编译器)
    ffmpeg编译的时候里面的汇编代码需要yasm.exe
    去官网:http://yasm.tortall.net/Download.html 下载
    文件名类似为:yasm-1.2.0-win64.exe(如果是64位系统下载32位版本yasm-1.2.0-win32.exe)

3 下载 ffmpeg
    ffmpeg可以到 http://www.ffmpeg.org/releases/ 下载
    选择的一个最新版本下载即可,如:ffmpeg-2.0.1.tar.gz
    文件名类似为:ffmpeg-2.0.1.tar.gz
    当然你也使用网上介绍的使用SVN直接下载源代码的方法。 
    svn://svn.mplayerhq.hu/ffmpeg/trunk
4 下载 mp3lame(支持mp3,可选项)
    为了让编译出来的ffmpeg支持对mp3格式的编解码,您需要先下载lame。
    到:http://sourceforge.net/projects/lame/files/ 下载
    文件名类似为:lame-3.99.5.tar.gz 的包。
5 下载 x264(支持x264,可选项)
    为了让编译出来的ffmpeg支持对x264格式的编解码,您需要先下载x264。
    到:http://www.videolan.org/developers/x264.html下载
    文件名类似为:last_x264.tar.bz2 的包。
6 下载 Xvid(支持Xvid,可选项)
    为了让编译出来的ffmpeg支持对Xvid格式的编解码,您需要先下载Xvid。
    到:http://www.xvid.org/ 下载
    文件名类似为:xvidcore-1.3.2.tar.gz 的包。
7 下载 faac(支持faac,可选项)
    到:http://www.audiocoding.com/downloads.html 下载:Version 1.28 bootstrapped
TAR.GZ Package
    文件名类似为:faac-1.28.tar.gz 的包。
8 下载 aacenc(支持aac,可选项)
    到:http://sourceforge.net/projects/opencore-amr/files/ 下载:vo-aacenc
    文件名类似为:vo-aacenc-0.1.2.tar.gz 的包。
9 下载 opencore-amr与vo-amrwbenc (支持3gp,可选项)
    到:http://sourceforge.net/projects/opencore-amr/files/ 下载:opencore-amr
与 vo-amrwbenc
    文件名类似为:opencore-amr-0.1.3.tar.gz 与vo-amrwbenc-0.1.2.tar.gz 的包。
10 下载 SDL(支持SDL,可选项)
    SDL下载可以到:http://www.libsdl.org/download-1.2.php
    在Source Code栏选择类似:SDL-1.2.15.tar.gz - GPG signed 进行下载,
    文件名类似为:SDL-1.2.15.tar.gz,此文件需要编译才能生成lib库。

四 编译步骤
1 安装 mingw 和 msys
    执行下载文件:mingw-get-inst-20120426.exe,
    在第3步选择“Download latest repository catalogues”
    选择安装路径:D:\Files\MinGW
    在“Select Components”步骤中选择:
      √  C Compiler (默认且一定选择)
      √  C++ Compiler
      √  MSYS Basic System(选择此项将会安装msys,msys则不需要另外安装)
      √  MinGW Developer ToolKit
    等待安装完成!(需要等待一定的时间,因为安装过程需要下载文件,可想而知,网速越快,安装越快)
    安装完成后,在D:\Files\MinGW目录下可以看到 msys 文件夹,msys也已经安装。

2 配置 msys.bat 批处理文件
    为了方便VS2010调用ffmpeg的动态库,可以通过配置让ffmpeg编译时产生windows下调用dll对应的lib,当然,如果你没有这个需要,那么就可以省略以下处理,直接进入步骤3。
    进入:D:\Files\MinGW\msys\1.0\文件夹,使用UltraEdit打开msys.bat文件,在文件的最最前面加入如下一行:

call "D:\Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"
    添加后效果如下:

 1 call "D:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"
 2          @echo off
 3          rem Copyright (C):  2001, 2002, 2003, 2004, 2005  Earnie Boyd
 4          rem   mailto:[email protected]
 5          rem This file is part of Minimal SYStem
 6          rem   http://www.mingw.org/msys.shtml
 7          rem
 8          rem File:     msys.bat
 9          rem Revision:     2.4
10          rem Revision Date:  December 8th, 2005
11          rem ember to set the "Start in:" field of the shortcut.
12          rem A value similar to C:\msys\1.0\bin is what the "Start in:" field needs
13          rem to represent.

其中“D:\Files\Microsoft Visual Studio 10.0”为你机器上安装VS2010的目录安装在了D盘。文件修改后保存即可。

3 系统整合
    使用UltraEdit修改D:\Files\MinGW\msys\1.0\etc目下的fstab文件,修改其内容为:D:/Files/MinGW,也即为MinGW的安装路径。

4 添加环境变量

在环境变量PATH前面添加 D:\Files\MinGW\msys\1.0\bin;

4 配置 yasm
    为了减少配置环境变量的麻烦,本处直接把yasm-1.1.0-win64.exe 文件名修改成:yasm.exe,并放到目录:D:\Files\MinGW\msys\1.0\bin

5 编译 mp3lame(可选项)
    lame-3.99.5.tar.gz 接压到:D:\Library\ffmpeg\
目录下,双击“D:\Files\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到lame目录:D:\ffmpeg
\lame-3.99.5
    $ cd /d
    $ cd Library/ffmpeg/lame-3.99.5

再执行以下命令:
    $./configure --disable-shared (首选)
     $ make
     $ make install
    编译结果在:D:\Files\MinGW\msys\1.0\local 目录下
6 编译 x264(可选项)
    last_x264.tar.bz2 接压到:D:\Library\ffmpeg\
目录下,双击“D:\Files\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到x264目录:D:
\Library\ffmpeg\x264-snapshot-20130630-2245
    $ cd /d
    $ cd Library/ffmpeg/x264-snapshot-20130630-2245

再执行以下命令:
    $./configure --enable-shared --disable-asm

用UE打开config.mak文件,修改:(64位系统)

CFLAGS=-Wshadow -O3 -ffast-math -m32  -Wall -I. -I$(SRCPATH)
-std=gnu99 -fomit-frame-pointer -fno-tree-vectorize
-fno-zero-initialized-in-bss

为:

CFLAGS=-Wshadow -O3 -ffast-math -m32  -Wall -I. -I$(SRCPATH)
-std=gnu99 -fomit-frame-pointer -fno-tree-vectorize
-fno-zero-initialized-in-bss -march=i686

$ make
    $ make install
    编译结果在:D:\Files\MinGW\msys\1.0\local 目录下
7 编译 Xvid(可选项)
    xvidcore-1.3.2.tar.gz 接压到:D:\Files\Library\ffmpeg\
目录下,双击“D:\Files\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到xvidcore目录:D:
\Files\Library\ffmpeg\xvidcore\build\generic

$ cd /d
    $ cd Files/Library/ffmpeg/xvidcore/build/generic
    再执行以下命令:
    $./configure --prefix=d:/Files/MinGW/msys/1.0/local
    $ make
    $ make install
    编译结果在:D:\Files\MinGW\msys\1.0\local 目录下。
    需要注意的就是:此处编译加上了路径
    如果make时出现:cc1.exe: error: unrecognized command line option
‘-mno-cygwin‘ 错误,请在./configure后make之前修改xvidcore\build\generic里的
platform.inc文件,直接删除里面的“-mno-cygwin”。

8 编译faac(可选项)
    faac-1.28.tar.gz 接压到:D:\Files\Library\ffmpeg\
目录下,双击“D:\Files\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。切换到
faac目 录:D:\Files\Library\ffmpeg\faac-1.28

将我提供的目录中的文件faac-1.28.diff拷贝到D:\Files\Library\ffmpeg\faac-1.28目录下,此文件是补丁文件,不然编译无法通过。

$ cd /d
    $ cd Files\Library\ffmpeg\faac-1.28

再执行以下命令:

$ patch -p1 < faac-1.28.diff
    $./bootstrap
    $./configure --disable-static --enable-shared
    $ make
    $ make install
    编译结果在:D:\Files\MinGW\msys\1.0\local 目录下

参考:http://blog.chinaunix.net/uid-517401-id-353377.html

不用编译faad2,新版本ffmpeg内置已经支持aac编码、解码,不需要libfaac、libfaad了,而且libfaac是nonfree的,nonfree是unredistributable即禁止发布。

9 编译vo-aacenc (可选项)
    vo-aacenc-0.1.2.tar.gz 接压到:D:\Files\Library\ffmpeg\
目录下,双击“D:\Files\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。切换到
vo- aacenc目录:D:\Files\Library\ffmpeg\vo-aacenc-0.1.2

$ cd /d
    $ cd Files\Library\ffmpeg\vo-aacenc-0.1.2
    $ cd vo-aacenc-0.1.2
    再执行以下命令:
    $./configure --disable-shared
    $ make
    $ make install
    编译结果在:D:\Files\MinGW\msys\1.0\local 目录下

10 编译opencore-amr 和vo-amrwbenc (可选项)
    opencore-amr-0.1.3.tar.gz 接压到:D:\Files\Library\ffmpeg\ 目录下,双击“D:\Files\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。
    切换到opencore-amr目录:D:\Files\Library\ffmpeg\opencore-amr-0.1.3
    $ cd /d
    $ cd Files\Library\ffmpeg\opencore-amr-0.1.3
    再执行以下命令:
    $./configure --disable-shared
    $ make CC=gcc
    $ make install
    编译结果在:D:\Files\MinGW\msys\1.0\local 目录下
    vo-amrwbenc-0.1.2.tar.gz 接压到: D:\Files\Library\ffmpeg\ 目录下,双击“D:\Files\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。切换到vo-amrwbenc目录:D:\Files\Library\vo-amrwbenc-0.1.2

$ cd /d
    $ cd Files\Library\vo-amrwbenc-0.1.2
    再执行以下命令:
    $./configure --disable-shared
    $ make CC=gcc
    $ make install
    编译结果在:D:\Files\MinGW\msys\1.0\local 目录下

11 编译SDL(可选项)
   SDL-1.2.15.tar.tar 解压到:D:\Files\Library\ffmpeg\ 目录下,
双击“D:\Files\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到SDL目录:D:\ffmpeg\SDL-
1.2.15,切换方法如下:
    $ cd /d
    $ cd Files\Library\ffmpeg
    $ cd SDL-1.2.15
    再执行以下命令:
    ./configure
    make
    make install
    编译结果在:D:\Files\MinGW\msys\1.0\local 目录下

使用UltraEdit打开D:\Files\MinGW\msys\1.0\local\bin下的 sdl-config文件
    把 prefix=/usr/local 该成: prefix=d:/Files/MinGW
    其中:D:/Files/MinGW 为 mingw的安装路径,请根据你的安装进行修改。为了编译时msys能识别sdl并开启 SDL
support yes
进行编译,请把D:\Files\MinGW\msys\1.0\local编译结果bin、include和lib中有关sdl的拷贝一份到D:
\Files\MinGW\的对 应目录中。


12 编译 ffmpeg

    安装下载pkg-config for MinGW/msys

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

pkg-config依赖的库: http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.18/glib_2.18.4-1_win32.zip

安装方法:把pkg-config.exe 和 libglib-2.0-0.DLL复制到环境变量包括的任意一个文件夹内,我是复制到MinGW安装路径\msys\1.0\bin
    ffmpeg-2.0.1.tar.gz 解压到:D:\Files\Library\ffmpeg\ 目录下,双击“D:\Files\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到ffmpeg目录:D:\Files\Library\ffmpeg\ffmpeg-2.0.1,切换方法如下:

$ cd /d
    $ cd Files\Library\ffmpeg\ffmpeg-2.0.1
    再执行以下命令:
    $ ./configure --enable-shared --disable-static --enable-ffplay
    --enable-nonfree --enable-memalign-hack
    --enable-libmp3lame
    --enable-gpl

--enable-libx264  
    --enable-libxvid

--enable-libfaac
    --enable-libvo-aacenc
    --enable-version3

--enable-libopencore-amrnb  
    --enable-libopencore-amrwb

--enable-libvo-amrwbenc
    --extra-cflags=-Id:/Files/MinGW/msys/1.0/local/include
    --extra-ldflags=-Ld:/Files/MinGW/msys/1.0/local/lib

--cpu=i686

--prefix=d:/Files/Library/ffmpeg/ffmpeg-2.0.1

注:如果64位系统不添加"--cpu=i686" 编译过程中会报 Threading is enabled, but there is no implementation of atomic operations available。

参考:http://www.cnblogs.com/chsin/archive/2013/04/15/3022299.html

请耐心等待一段时间,以上命令不能直接换行哦并且根据ffmpeg的版本不同有所变化,具体看./configure --help,你知道的。。。
    $ make
    需要等待很长一段时间,等待编译结束。
    为了汇总编译结果,请继续执行以下命令:
    $ make install
    等待完成,在d:/Files/Library/ffmpeg/ffmpeg-2.0.1中将会生成 bin、include、lib等文件夹,其中包含了ffmpeg.exe、ffplay.exe、ffprobe.exe、dll、lib和头文件等。

13 运行测试
  确实以下dll:

libx264-133.dll 和 sdl.dll在 D:\Files\MinGW\msys\1.0\local\bin找到。

xvidcore.dll在D:\Files\MinGW\msys\1.0\local\lib 找到。

pthreadGC2.dll 和 libiconv-2.dll 在D:\Files\MinGW\bin 找到。

14 引用DLL

提示无法找到"#include <inttypes.h>"。

创建文件inttypes.h

  1 #ifndef _INTTYPES_H_ALL_
  2 #define _INTTYPES_H_ALL_
  3
  4 // _INTTYPES_H_SYS_: 编译器是否提供了<inttypes.h>
  5 #undef _INTTYPES_H_SYS_
  6 #if defined(__GNUC__)    // GCC.
  7     #define _INTTYPES_H_SYS_
  8 #elif defined(_MSC_VER)    // MSVC. VC2010仍不支持.
  9 #elif defined(__BORLANDC__)    // BCB. BCB6仍不支持.
 10 #else
 11     #define _INTTYPES_H_SYS_    // 假设其他编译器支持C99.
 12 #endif    // _INTTYPES_H_SYS_
 13
 14
 15 #ifdef _INTTYPES_H_SYS_
 16 // 使用编译器提供的<inttypes.h>
 17 #include <inttypes.h>
 18 #else
 19 // 采用自定义的inttypes.h. 参考了 msinttypes: http://code.google.com/p/msinttypes/
 20
 21 #ifndef _MSC_INTTYPES_H_ // [
 22 #define _MSC_INTTYPES_H_
 23
 24 #include "stdint.h"
 25
 26 // 7.8 Format conversion of integer types
 27
 28 typedef struct {
 29    intmax_t quot;
 30    intmax_t rem;
 31 } imaxdiv_t;
 32
 33 // 7.8.1 Macros for format specifiers
 34
 35 #if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [   See footnote 185 at page 198
 36
 37 // The fprintf macros for signed integers are:
 38 #define PRId8       "d"
 39 #define PRIi8       "i"
 40 #define PRIdLEAST8  "d"
 41 #define PRIiLEAST8  "i"
 42 #define PRIdFAST8   "d"
 43 #define PRIiFAST8   "i"
 44
 45 #define PRId16       "hd"
 46 #define PRIi16       "hi"
 47 #define PRIdLEAST16  "hd"
 48 #define PRIiLEAST16  "hi"
 49 #define PRIdFAST16   "hd"
 50 #define PRIiFAST16   "hi"
 51
 52 #if defined(_MSC_VER) && _MSC_VER<=1200    // VC6
 53 #define PRId32       "d"
 54 #define PRIi32       "i"
 55 #define PRIdLEAST32  "d"
 56 #define PRIiLEAST32  "i"
 57 #define PRIdFAST32   "d"
 58 #define PRIiFAST32   "i"
 59 #else
 60 #define PRId32       "I32d"
 61 #define PRIi32       "I32i"
 62 #define PRIdLEAST32  "I32d"
 63 #define PRIiLEAST32  "I32i"
 64 #define PRIdFAST32   "I32d"
 65 #define PRIiFAST32   "I32i"
 66 #endif
 67
 68 #define PRId64       "I64d"
 69 #define PRIi64       "I64i"
 70 #define PRIdLEAST64  "I64d"
 71 #define PRIiLEAST64  "I64i"
 72 #define PRIdFAST64   "I64d"
 73 #define PRIiFAST64   "I64i"
 74
 75 #define PRIdMAX     "I64d"
 76 #define PRIiMAX     "I64i"
 77
 78 #define PRIdPTR     "Id"
 79 #define PRIiPTR     "Ii"
 80
 81 // The fprintf macros for unsigned integers are:
 82 #define PRIo8       "o"
 83 #define PRIu8       "u"
 84 #define PRIx8       "x"
 85 #define PRIX8       "X"
 86 #define PRIoLEAST8  "o"
 87 #define PRIuLEAST8  "u"
 88 #define PRIxLEAST8  "x"
 89 #define PRIXLEAST8  "X"
 90 #define PRIoFAST8   "o"
 91 #define PRIuFAST8   "u"
 92 #define PRIxFAST8   "x"
 93 #define PRIXFAST8   "X"
 94
 95 #define PRIo16       "ho"
 96 #define PRIu16       "hu"
 97 #define PRIx16       "hx"
 98 #define PRIX16       "hX"
 99 #define PRIoLEAST16  "ho"
100 #define PRIuLEAST16  "hu"
101 #define PRIxLEAST16  "hx"
102 #define PRIXLEAST16  "hX"
103 #define PRIoFAST16   "ho"
104 #define PRIuFAST16   "hu"
105 #define PRIxFAST16   "hx"
106 #define PRIXFAST16   "hX"
107
108 #if defined(_MSC_VER) && _MSC_VER<=1200    // VC6
109 #define PRIo32       "o"
110 #define PRIu32       "u"
111 #define PRIx32       "x"
112 #define PRIX32       "X"
113 #define PRIoLEAST32  "o"
114 #define PRIuLEAST32  "u"
115 #define PRIxLEAST32  "x"
116 #define PRIXLEAST32  "X"
117 #define PRIoFAST32   "o"
118 #define PRIuFAST32   "u"
119 #define PRIxFAST32   "x"
120 #define PRIXFAST32   "X"
121 #else
122 #define PRIo32       "I32o"
123 #define PRIu32       "I32u"
124 #define PRIx32       "I32x"
125 #define PRIX32       "I32X"
126 #define PRIoLEAST32  "I32o"
127 #define PRIuLEAST32  "I32u"
128 #define PRIxLEAST32  "I32x"
129 #define PRIXLEAST32  "I32X"
130 #define PRIoFAST32   "I32o"
131 #define PRIuFAST32   "I32u"
132 #define PRIxFAST32   "I32x"
133 #define PRIXFAST32   "I32X"
134 #endif
135
136 #define PRIo64       "I64o"
137 #define PRIu64       "I64u"
138 #define PRIx64       "I64x"
139 #define PRIX64       "I64X"
140 #define PRIoLEAST64  "I64o"
141 #define PRIuLEAST64  "I64u"
142 #define PRIxLEAST64  "I64x"
143 #define PRIXLEAST64  "I64X"
144 #define PRIoFAST64   "I64o"
145 #define PRIuFAST64   "I64u"
146 #define PRIxFAST64   "I64x"
147 #define PRIXFAST64   "I64X"
148
149 #define PRIoMAX     "I64o"
150 #define PRIuMAX     "I64u"
151 #define PRIxMAX     "I64x"
152 #define PRIXMAX     "I64X"
153
154 #define PRIoPTR     "Io"
155 #define PRIuPTR     "Iu"
156 #define PRIxPTR     "Ix"
157 #define PRIXPTR     "IX"
158
159 // The fscanf macros for signed integers are:
160 #define SCNd8       "d"
161 #define SCNi8       "i"
162 #define SCNdLEAST8  "d"
163 #define SCNiLEAST8  "i"
164 #define SCNdFAST8   "d"
165 #define SCNiFAST8   "i"
166
167 #define SCNd16       "hd"
168 #define SCNi16       "hi"
169 #define SCNdLEAST16  "hd"
170 #define SCNiLEAST16  "hi"
171 #define SCNdFAST16   "hd"
172 #define SCNiFAST16   "hi"
173
174 #define SCNd32       "ld"
175 #define SCNi32       "li"
176 #define SCNdLEAST32  "ld"
177 #define SCNiLEAST32  "li"
178 #define SCNdFAST32   "ld"
179 #define SCNiFAST32   "li"
180
181 #define SCNd64       "I64d"
182 #define SCNi64       "I64i"
183 #define SCNdLEAST64  "I64d"
184 #define SCNiLEAST64  "I64i"
185 #define SCNdFAST64   "I64d"
186 #define SCNiFAST64   "I64i"
187
188 #define SCNdMAX     "I64d"
189 #define SCNiMAX     "I64i"
190
191 #ifdef _WIN64 // [
192 #  define SCNdPTR     "I64d"
193 #  define SCNiPTR     "I64i"
194 #else  // _WIN64 ][
195 #  define SCNdPTR     "ld"
196 #  define SCNiPTR     "li"
197 #endif  // _WIN64 ]
198
199 // The fscanf macros for unsigned integers are:
200 #define SCNo8       "o"
201 #define SCNu8       "u"
202 #define SCNx8       "x"
203 #define SCNX8       "X"
204 #define SCNoLEAST8  "o"
205 #define SCNuLEAST8  "u"
206 #define SCNxLEAST8  "x"
207 #define SCNXLEAST8  "X"
208 #define SCNoFAST8   "o"
209 #define SCNuFAST8   "u"
210 #define SCNxFAST8   "x"
211 #define SCNXFAST8   "X"
212
213 #define SCNo16       "ho"
214 #define SCNu16       "hu"
215 #define SCNx16       "hx"
216 #define SCNX16       "hX"
217 #define SCNoLEAST16  "ho"
218 #define SCNuLEAST16  "hu"
219 #define SCNxLEAST16  "hx"
220 #define SCNXLEAST16  "hX"
221 #define SCNoFAST16   "ho"
222 #define SCNuFAST16   "hu"
223 #define SCNxFAST16   "hx"
224 #define SCNXFAST16   "hX"
225
226 #define SCNo32       "lo"
227 #define SCNu32       "lu"
228 #define SCNx32       "lx"
229 #define SCNX32       "lX"
230 #define SCNoLEAST32  "lo"
231 #define SCNuLEAST32  "lu"
232 #define SCNxLEAST32  "lx"
233 #define SCNXLEAST32  "lX"
234 #define SCNoFAST32   "lo"
235 #define SCNuFAST32   "lu"
236 #define SCNxFAST32   "lx"
237 #define SCNXFAST32   "lX"
238
239 #define SCNo64       "I64o"
240 #define SCNu64       "I64u"
241 #define SCNx64       "I64x"
242 #define SCNX64       "I64X"
243 #define SCNoLEAST64  "I64o"
244 #define SCNuLEAST64  "I64u"
245 #define SCNxLEAST64  "I64x"
246 #define SCNXLEAST64  "I64X"
247 #define SCNoFAST64   "I64o"
248 #define SCNuFAST64   "I64u"
249 #define SCNxFAST64   "I64x"
250 #define SCNXFAST64   "I64X"
251
252 #define SCNoMAX     "I64o"
253 #define SCNuMAX     "I64u"
254 #define SCNxMAX     "I64x"
255 #define SCNXMAX     "I64X"
256
257 #ifdef _WIN64 // [
258 #  define SCNoPTR     "I64o"
259 #  define SCNuPTR     "I64u"
260 #  define SCNxPTR     "I64x"
261 #  define SCNXPTR     "I64X"
262 #else  // _WIN64 ][
263 #  define SCNoPTR     "lo"
264 #  define SCNuPTR     "lu"
265 #  define SCNxPTR     "lx"
266 #  define SCNXPTR     "lX"
267 #endif  // _WIN64 ]
268
269 #endif // __STDC_FORMAT_MACROS ]
270
271 // 7.8.2 Functions for greatest-width integer types
272
273 // 7.8.2.1 The imaxabs function
274 #define imaxabs _abs64
275
276 // 7.8.2.2 The imaxdiv function
277
278 #ifdef _MSC_VER
279 // This is modified version of div() function from Microsoft‘s div.c found
280 // in %MSVC.NET%\crt\src\div.c
281 #ifdef STATIC_IMAXDIV // [
282 static
283 #else // STATIC_IMAXDIV ][
284 _inline
285 #endif // STATIC_IMAXDIV ]
286 imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
287 {
288    imaxdiv_t result;
289
290    result.quot = numer / denom;
291    result.rem = numer % denom;
292
293    if (numer < 0 && result.rem > 0) {
294       // did division wrong; must fix up
295       ++result.quot;
296       result.rem -= denom;
297    }
298
299    return result;
300 }
301 #endif  // #ifdef _MSC_VER
302
303 // 7.8.2.3 The strtoimax and strtoumax functions
304 #define strtoimax _strtoi64
305 #define strtoumax _strtoui64
306
307 // 7.8.2.4 The wcstoimax and wcstoumax functions
308 #define wcstoimax _wcstoi64
309 #define wcstoumax _wcstoui64
310
311
312 #endif // _MSC_INTTYPES_H_ ]
313
314 #endif // #ifdef _INTTYPES_H_SYS_
315
316 #endif // #ifndef _INTTYPES_H_ALL_ 

inittypes.h

参考:http://www.cnblogs.com/zyl910/archive/2012/08/08/c99int.html

将文件放到 D:\Files\Microsoft Visual Studio 10.0\VC\include 目录下,D:\Files\Microsoft Visual Studio 10.0是你VS的安装目录。

欢迎转载,转载请注明出处。。。。。

时间: 2024-10-10 10:41:50

Windows(x64)编译FFMPEG-2.0.1的相关文章

在Windows下编译FFmpeg详细说明

MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU For Windows.它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC产生 Windows32 程序. 开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境. 所以

Windows10平台编译ffmpeg 4.0.2,生成ffplay

Windows10平台编译ffmpeg 4.0.2,生成ffplay 最近想研究下ffplay的代码,学习代码是枯燥无味的,也是抽象的,学习一个系统或者软件之前,好的入门方法是先把系统搭建起来,或者把软件编译出来,直观的操作一下相关的功能,由表入里,熟悉功能之后,在慢慢深入代码,由现象看到本质,才能理解的更加深刻. ffmpeg目前最新的代码是4.0.2.编译ffmpeg代码之前需要做一些准备工作. 安装编译环境 网上有两种windows下的gcc编译环境可供选择,一个是MinGW,另外一个是c

在Windows下编译ffmpeg完全手册

本文的内容几乎全部来自于FFmpeg on Windows,但是由于国内的网络封锁,很难访问这个域名下的内容,因此我一方面按照我自己的理解和实践做了翻译,另一方面也是为了能提供一个方便的参考方法. 注: 1.       对于compile和build这两个词,本文统一的使用编译这个词,根据上下文读者应能区分语义上的差别. 本文的目的是提供一切与FFmpeg在Windows下的相关帮助.它最初是一个针对用MSys+MinGW系统编译的手把手的教程,现在也增加了如何在你的项目中链接FFmpeg所产

windows 下使用 MinGW + msys 编译 ffmpeg

本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.    FFmpeg是在Linux平台下开发的,但它同样可以在其它操作系统环境中编译运行,本文介绍的就是在windows下编译FFmpeg.一 编译准备    您最好新建一个目录专门用来保存以下下载的文件.1 下载 MinGW 和 MSYS    MinGW(Minimalist GNU on Windows):一个可自由使用和自由发布的Windo

Windows下编译安装 FFmpeg

在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在windows下安装 ffmpeg 的最好方式就是使用Cygwin. Cygwin是什么呢?简单的说,就是在 Windows上装了一个Linux模拟器.然后你可以在这个模拟器上按照Linux的方式操作 Windows系统.因此,Windows安装了Cygwin之后,你就把它当Linux用就可以了. 既然在W

win下编译ffmpeg库,Compile and build ffmpeg library and dll on Windows x64( 正版)

转载请注明:来自EricKing,thanks 从没想到编一个library这么坑爹,再次提醒各位百度的东西只能参考,想节约时间还是要到官网上去查看docum.不废话了,开始详细过程: ——>1.搭建Win下的GCC编译环境(因为win下vs不支持ffmpeg的compile 和build,官网上也有说这一点) ——>2.下载latest ffmpeg source(后面附官网地址),想办法将编译后的文件做成dll,这是win下编程调试的核心 (这里就用到vs下的一个vc的bash文件叫vcv

windows下用vs2010编译ffmpeg

转载自;http://q1q2q3q4q5q6ln.blog.163.com/blog/static/500794332014666536283/ (注意:请务必先阅读:七,后记补充:) ffmpeg是一个开源的多媒体库,使用非常广泛.在linux下编译ffmpeg非常简单,而在Windows下编译就不是那么容易了.一般在windows下使用MinGW的gcc toolchain进行编译,这样的话,因为ffmpeg的导出函数均是C风格,因而gcc编译的lib可以被vs链接.但是gcc的debug

图文介绍windows下实现编译ffmpeg工程的详细步骤

本文来自:http://www.cuplayer.com/player/PlayerCode/FFmpeg/2014/0706/1401.html 图文介绍windows下实现编译ffmpeg工程的详细步骤: 1.搭建 MinGW 的编译环境 下载yasm,地址:http://yasm.tortall.net/Download.html 改名为yasm.exe放到C:\WINDOWS\system32 或者 C:\MinGW\msys\1.0\bin文件夹下. 下载 mingw-get-inst

windows 7下mingw+msys编译ffmpeg

windows 7下mingw+msys编译ffmpeg 1-->下载安装MingW,mingw-get-inst-20120426.exe  http://sourceforge.net/projects/mingw/ 安装路径 默认C:\MinGW .勾选了 <1> C Compiler  <2> C++ Compiler <3>MSYS Basic System <4>MinGW Developer ToolKit 其中 <3>就安装

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)

[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe. 假设 Visual Studio 2005 的安装路径为“D:\Program