Cygwin 交叉编译 ffmpeg for win ce

 ffmpeg作为一个开源的比较好的解码库,编码库,音视频播放位一体的程序,很值得参考,虽然直接把他一直到mobile上面效率不佳,但是经过针对arm 汇编优化后的解码库还是不错的。我在我的项目里面准备使用它的解码库,根据自己的实际需要裁减编译成vs2005可用的静态库。

  从网上找了很多资源,可是都有头没尾的,自己实际编译了一下。整理供自己以后编译用,呵呵。

  环境:Windows XP 下用Cygwin,cygwin的版本无所谓,安装一个相对完整的cygwin就ok了。

  编译器用cygwin-cegcc-mingw32ce-0.51.0-1,这个是一整个cygwin或者linux下面编译ce程序的工具链。下载地址是http://ncu.dl.sourceforge.net/sourceforge/cegcc/cygwin-cegcc-cegcc-0.51.0-1.tar.gz

  源码:我用的是国外一个播放器裁减的他们在windows ce上面编译过的版本,下载地址为http://nchc.dl.sourceforge.net/sourceforge/ambulant/ffmpeg-wm5.zip  是2009年2月份的一个版本,还可以接受,不是太老。

  下面就开始了:

  1.将cygwin-cegcc-mingw32ce-0.51.0-1解压到 cygwin的安装目录下,如果驻cygwin的安装目录为c:\\cygwin,

   那么解压后cegcc的目录应该为c:\\cygwin\\opt\\mingw32ce

  2.将源码解压,随便你想放到哪里,假设c:\\cygwin\\ffmpegwm5 下面就行

  3.打开cygwin,进入源码目录,如 cd /ffmpegwm5

  4.修改PATH, 在命令行健入 PATH=/opt/mingw32ce/bin:$PATH

  5.开始编译,输入以下configure选项:

./configure --enable-memalign-hack --target-os=mingw32ce --arch=arm --enable-cross-compile 
--cross-prefix=arm-wince-mingw32ce- --enable-small 
--enable-static --enable-shared 
--disable-mmx --disable-zlib --disable-ipv6 --disable-debug 
--disable-ffmpeg --disable-ffserver --disable-ffplay 
--disable-encoders --disable-network --disable-muxers --disable-decoders --disable-filters 
--disable-demuxers --disable-devices --disable-protocols --disable-bsfs --disable-parsers 
--enable-decoder=mpeg4 
--enable-decoder=h264 --extra-cflags=\"-march=armv4 -mtune=xscale\"

  这个是我自己的,你可以./configure --help来看具体的configure配置选项,还有他的解码库什么的。

  6.打开c:\\cygwin\\opt\\mingw32ce\\arm-wince-mingw32ce\\include\\errno.h 

  注掉  11行 //#ifdef __COREDLL__ 
        12行 //# include_next  
        13行 //#else /* __COREDLL__ */ 
        107行//#endif /* Not __COREDLL__ */

   当然,你要高兴只把11行改成//#ifdef 0 也行。都一样的。

   然后,按先后顺序,分别进入libavutil,libavcodec,libavformat,分别make,就得到 dll,但是他最后会提示你make:lib command not found之类的错误,这个不要担心,呵呵,是不能生成lib而已。

  7. pexports *.dll > *.def  用这个工具对咱们的dll生成def文件,方便下一步生成lib,这个工具的下载地址是http://www.emmestech.com/software/pexports-0.43/pexports-0.43.zip 下载完了再bin目录下找到这个工具,生成def文件即可。

  8. 生成lib文件。Microsoft Visual Studio 8\\VC\\bin\\lib.exe /def:*.def /MACHINE:ARM 这个就可以生成lib,他中间可能会提示你mspdb80.dll无法找到,这个文件其实有,只是和lib不同路径。解决方法:添加系统变量(Path),这样:我的电脑->属性->高级->环境变量->系统变量,在path中添加C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE;,注意结尾最后用“;”。下面在运行就可以生成.lib文件了。具体各个编译器生成lib,dll什么不同的,可以参考 http://www.geocities.com/yongweiwu/stdcall.htm

  9.希望大家喜欢,因为lib我编译出来的不一定适合大家用,就不上了,大家自己编译吧。

  ps:

  很多同学发现这个方法引用函数没有问题,可是在引用dll里面全局变量的时候会有问题。这个主要是因为方法不对,下面给出全局变量的调用办法。

#pragma comment(lib,\"../ffmpeg/lib/avcodec.lib\") 
extern AVCodec _declspec(dllimport) h263_decoder; 
extern AVCodec _declspec(dllimport) mpeg4_decoder; 
extern AVCodec _declspec(dllimport) h264_decoder;


转自 http://www.rosoo.net/a/200910/7578.html

你可能感兴趣的:(ffmpeg)