﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Breaking Free</title><link>http://www.cppblog.com/Arcrest/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 03 Apr 2026 18:12:01 GMT</lastBuildDate><pubDate>Fri, 03 Apr 2026 18:12:01 GMT</pubDate><ttl>60</ttl><item><title>艰辛的ffmpeg &amp; gcc4.3.2 mingw编译</title><link>http://www.cppblog.com/Arcrest/archive/2008/09/01/60605.html</link><dc:creator>Arcrest</dc:creator><author>Arcrest</author><pubDate>Mon, 01 Sep 2008 07:20:00 GMT</pubDate><guid>http://www.cppblog.com/Arcrest/archive/2008/09/01/60605.html</guid><wfw:comment>http://www.cppblog.com/Arcrest/comments/60605.html</wfw:comment><comments>http://www.cppblog.com/Arcrest/archive/2008/09/01/60605.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/Arcrest/comments/commentRss/60605.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Arcrest/services/trackbacks/60605.html</trackback:ping><description><![CDATA[&nbsp; 整个周末基本上就浪费在折腾ffmpeg的编译上了。<br>&nbsp; 从接手实验室的某个项目开始，就一直在用ffmpeg这个强大的东西。不知道啥时候开始，ffmpeg的结构做了一次调整，几个头文件分别放到了单独的目录，结果mingw就无法编译了，错误是"No rule to make target `libavdevice/avdevice.dll' "， 好像这没啥关系。后来一直也没去理会过这个，直到前天写程序的时候突然被ffmpeg的强大所感动, 开始打算找出问题，编译个新版本,ft，多幼稚，这一下搞得我浪费了差不多2天时间。 首先用cygwin尝试编译，却发现非常的顺利，不明白。几经折腾，才发现原来是makefile变了，而我的mingw上的make版本低了,3.79，更新到3.81后就顺利编译通过了，但是从3.79-&gt;3.80-&gt;3.81究竟有些啥区别我也没去细究了，总之能够编译了。<br>&nbsp; 编译是完成了，但是编译后的程序却有问题，播放mepg-4的avi没问题，但是播放264却非常干脆的挂了，这太要命了。突然我想起以前用ffmpeg的时候总会打印一段话，大概意思是说libavcodec应该用4.2以上的gcc编译，否则会很慢或者Crash。所以我立刻去mingw上找最新版本的gcc，却发现只有4.3.0 alpha的，但是这个时候最新的gcc已经是4.3.2了，alpha的用着多不爽。google吧，还真有三方的mingw gcc 4.3.2，叫TDM gcc吧，欣喜之下立刻下来安装，编译。。。 这次更郁闷了，编译倒是很顺利，但是ffplay没法用，"Application failed to initialize properly"。 无奈，alpha就alpha吧，凑合着用。 但是官方的果然就是官方的啊，imba，这alpha版本也足够了，编译、运行统统OK，牛！<br><br>&nbsp;&nbsp; 但是老毛病又来了，alpha还是看着不爽，一定要搞个4.3.2来试试才罢休。于是下载了gcc4.3.2，找到了个网上的教程，
<a title="用MINGW编译GCC4.2.2指南" href="http://www.cppblog.com/zelsazgh/archive/2007/12/15/38549.html">用MINGW编译GCC4.2.2指南</a>。 这个过程太郁闷了，之间出的大小问题无数，主要这几个大问题:<br>&nbsp;&nbsp; 1. gmp无法编译，从4.2.1到4.2.3都试过了，也在google上搜索了，但是很少见到有说gmp编译不过的，最后找了个编译好的成品 <a title="GMP install instruction for windows platform" href="http://www.cs.nyu.edu/exact/core/gmp/">GMP Install Instruction for Windows Platform。</a>题外话，这东西听起来很牛的样子，我太土了。<br>&nbsp;&nbsp; 2. libtool问题，中间有个libtool 运行m4的命令，始终报告错误 m4 gcc : no such file or directory。在这里卡住后，已经折腾到了凌晨3点半。怒了，决定把mingw全部重装一遍，不过睡一觉先。&nbsp; 重装mingw又是件繁琐的事情，基本上大部分组件的最新版本都下载安装了。还好努力没白费，不但这个错误通过了，而且gmp也顺利的编译了。其实还是不明白到底是mingw系统中哪个部分出错了<br>&nbsp;&nbsp; 3.最后一个组件貌似libgomp，缺少pthreads。找找了，libpthread.a是存在的，但是没pthread的头文件，后来是在这里下载了<a title="POSIX threads (pthreads) for win32" href="http://sourceware.org/pthreads-win32/">POSIX Threads (pthreads) for Win32</a> 的头文件，但是貌似这里的bin和source中带的头文件不一样，source中的三个头文件才是可用的。<br>&nbsp;&nbsp; <br>&nbsp; 编译过程很漫长，build目录下文件累积大概700M，本本的风扇一直呼呼的转，最后嘎嘎直响向我抗议，唉，明天拿去维修吧。 <br>&nbsp; 幸运的是最后编译成功了:<br>$ gcc -v<br>Using built-in specs.<br>Target: i686-pc-mingw32<br>Configured with: ../../source/configure --prefix=/mingw --enable-languages=c,treelang --disable-nls --disable-werror --disable-win32-registry --enable-sjlj-exceptions --enable-threads=win32 --disable-libstdcxx-pch --enable-fully-dynamic-string --enable-libgomp --with-tune=generic --with-as=/mingw/bin/as.exe --with-ld=/mingw/bin/ld.exe --with-gcc --with-gnu-ld --with-gnu-as<br>Thread model: win32<br>gcc version 4.3.2 (GCC) <br>&nbsp;&nbsp; configure option 基本就是抄的那个链接的。<br><br>&nbsp;&nbsp;
不幸的是结果还是一样的。静态连接的ffplay可以使用，但是动态连接的仍然和TDM发行的gcc4.3.2编译结果一样，"Application failed to initialize properly"。所以还是等待官方的mingw吧，不过这个alpha版的也没啥问题，不过我一直对性能比较以及alpha字眼过于在乎，才会去实验编译新版本，其实上自己也知道没啥差异，就那个毛病。<br>&nbsp; <br>&nbsp; <span style="color: #688eff;">中间我还有个想法是能不能把mingw编译的静态库在VC下链接，结果一试发现不行，粗略看了看，基本上都是CRT的函数找不到，可能是mingw用的CRT lib不一样，没有VC6，也就没去试了。路过的朋友，如果知道些什么，请教了，:)</span><br><br><br><br><br><br>  <img src ="http://www.cppblog.com/Arcrest/aggbug/60605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Arcrest/" target="_blank">Arcrest</a> 2008-09-01 15:20 <a href="http://www.cppblog.com/Arcrest/archive/2008/09/01/60605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>