在cygwin用高版本gcc编译独立于cygwin的ffmpeg

以前在编译需要不依赖于cygwin(主要是cyggcc_s-1.dll和cygwin1.dll)的程序时可加上-mno-cygwin参数,但这个参数只是针对gcc3的,而gcc4不再支持这个参数,替代方法是使用mingw。网上常说的方法是mingw32+msys来配合编译,不过在现在的cygwin中其实是支持mingw32的,安装好相关组件后就能进行相应工作了。我在编译ffmpeg的时候就采用的这种方法,不过在配置参数的时候需要一些特殊处理,现总结如下:
一、相关工具版本
cygwin的setup版本2.769,cygwin1.dll版本1.7.15
gcc版本4.5.3,i686-pc-mingw32-gcc版本4.5.2(集成到cygwin中而不是单独的MinGW)
yasm版本1.2.0
ffmpeg版本0.10.2
SDL版本1.2.15
lib.exe使用vs2005自带的,因此需要指定路径让cygwin中的编译器能调用到它
二、配置参数
export PATH=/usr/winnt/bin:$PATH
CFLAGS="-I. -I.." ./configure --enable-memalign-hack --enable-gpl --enable-version3 --enable-static --enable-shared \
--enable-cross-compile --cross-prefix=i686-pc-mingw32- --cc=i686-pc-mingw32-gcc --arch=x86 --target-os=mingw32 \
--enable-libx264 --extra-libs='-lx264 -lwinmm' --prefix=/usr/winnt \
--extra-cflags='-I/usr/winnt/include -I/cygdrive/d/dx9csdk/include -mno-cygwin' --extra-ldflags='-L/usr/winnt/lib -L/cygdriver/d/dx9csdk/lib'
三、参数说明
1、CFLAGS设置:解决编译时产生的找不到头文件错误
2、--cc:使用mingw的编译器,能够支持-mno-cygwin
3、--enable-cross-compile --cross-prefix:这两个是比较有意思的,从字面理解是在进行交叉编译的时候才用得上,但是在实际情况下只加了--cc参数时生成的文件还是依赖于cygwin环境的
4、--arch --target-os:加了上面两个参数时也必须加这两个了,是依赖项
5、--enable-libx264:ffmpeg默认是不带h264编码的,需要单独下载x264编译后指定头文件和库文件路径让configure进行配置
6、关于dx9csdk:新版ffmpeg支持dshow输出设备,需要单独下载directx sdk后指定头文件和库文件路径让configure进行配置,我是放在d:\dx9cssdk目录下的
7、export PATH:ffplay依赖于SDL,需要单独下载SDL编译。configure需要调用sdl-config来配置,因为sdl-config是安装在自定义路径下(/usr/winnt/bin),所以要设置一下环境变量才能找到sdl-config
8、前面7条定了后,关于filter、encoder、decoder的定制就是disable和enable的问题了

修改(2015.11.5)

在新的cygwin(安装程序版本2.873)发现已经不需要这么复杂设置参数了,只需要在configure的时候指定--build参数为i686-pc-mingw32就会使用i686-pc-mingw32-gcc这个编译器(4.7.3),指定参数为i686-pc-cygwin就会使用i686-pc-cygwin-gcc(4.9.3),不指定--build参数则默认使用i686-pc-cygwin-gcc,也就是有cygwin1.dll依赖的。
四、wince版本
mingw32ce版本0.59.1,配置参数如下:
./configure --enable-neon --enable-memalign-hack --enable-gpl --enable-version3 --enable-static --enable-shared --disable-pic \
--disable-pthreads --disable-zlib \
--arch=arm --target-os=mingw32ce --enable-cross-compile --cross-prefix=arm-mingw32ce- --cc='arm-mingw32ce-gcc' \
--extra-cflags="-I. -I.. -I/usr/wince/include -I/usr/wince/include/wceshunt -D_WIN32_WCE=0x0600 -DUNICODE -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mno-cygwin" \
--extra-ldflags="-L/usr/wince/lib -Wl,--enable-auto-import -static-libgcc" --extra-libs="-lwceshunt" --prefix=/usr/wince
说明:和前面的参数大同小异,不同地方因为我是编译针对cortex-a8平台的,所以需要neon指令的支持;-static-libgcc参数是为了不依赖libgcc_s_sjlj-1.dll;--disable-pic是在后面生成dll时需要的

你可能感兴趣的:(gcc,filter,Path,编译器,WinCE)