2009年10月3日星期六

在MinGW中安装并使用GCC4.4.0

一直懒得升级MinGW的GCC,因为嫌麻烦,这真是一个很不好的习惯,其实我们应该要常常提醒自己是否“是否在使用最好最新的工具?”,一直到前几天在我的一个小程序使用FFmpeg的avcodec_encode_video()函数发生崩溃(Crash)后才决定升级GCC。avcodec_encode_video()函数发生崩溃是因为堆栈定向问题(stack alignment issue),有兴趣的可以看这个网页里的讨论:
http://ffmpeg.arrozcru.org/forum/viewtopic.php?f=1&t=549如果使用gcc >= 4.2版本就可以解决问题。

MinGW在2009年6月份已经释出了GCC 4.4.0请到以下的站点:http://sourceforge.net/projects/mingw/files/下载如下的文件(假设你只是要使用gcc,c++编译器,如果要使用java,objc,请下载其他相关的文档)
gcc-ada-4.4.0-mingw32-dll
gcc-core-4.4.0-mingw32-bin
gcc-core-4.4.0-mingw32-dll
gcc-c++-4.4.0-mingw32-bin
gcc-c++-4.4.0-mingw32-dll
gmp-4.2.4-mingw32-dll
mpfr-2.4.1-mingw32-dll
下完后,请直接解压到MinGW的目录中去,例如C:\MinGW里。

然后重新安装msys,很简单以前的文章就提过了,不要忘了下载coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2并且解压到msys的目录中去,因为在默认状态下msys并没有完全安装coreutils的所有组件。为什么要安装完整的coreutils组件呢,这是因为有些make文件里的指令需要coreutils的一些组件才能正确识别。coreutils的最新版可以http://ftp.gnu.org/pub/gnu/coreutils/里找到。

现在有了MinGW5.16+GCC4.4.0+msys,我对我常用的几个库进行了重新编译(理论上不需要对所有所使用的库重新编译,因为高版本的GCC应该向下兼容低版本的GCC所编译的库):

Qt4.5.1已经用了挺长的一段时间,9月30日我下载了了Qt4.5.2然后编译了它,没想到10月1日Qt释出了4.5.3。哈,不想再编译一遍了,因为即使使用配置了Core i7的机器,编译Qt也需要很长的时间。编译的方法如下:先将C:\MinGW\bin和C:\Qt\4.5.2\bin加入环境变量的path里。然后进入Qt by Nokia v4.5.2 --> Qt 4.5.2 Command Prompt并输入configure(当然了,可以进行configure调整,具体请输入configure --help看说明),最后输入mingw32-make,就开始编译了。

LIVE555也于28-Sep-2009已经释出了新版本,可到以下站点下载。http://live555.com/liveMedia/public/然后重新编译,很简单,解压下载完的原文档,然后通过msys进入它的目录,先输入./genMakefiles mingw然后输入make,就搞定了。如果遇到问题可能要对config.mingw进行一些微调,例如将第三行C_COMPILER =           $(CC)的改成C_COMPILER =           $ gcc

对FFmpeg编译可以按照以前介绍过的方法,但是编译好我的项目并正确连接编译好的ffmpeg动态库后,运行我的程序会出现这样的错误:"The application failed to initialize properly - 0xc0000005" 很无奈,我的解决方法比较愚蠢,重新编译FFmpeg生成静态链接库(.a),然后在项目设定中使用静态链接库代替动态库(.dll),结果程序可以正常运行,只是我的主程序增肥了不少,这是暂时的解决方法。

还编译了一些库,使用gcc4.4.0编译和使用几乎没有问题,这里就不多谈了。在网上找了一下我使用过的一些库,很多开源库都陆续释出新的版本,我使用的版本真的很旧了,使用开源库要常常注意它们的更新,还是那句话要常常“提醒自己是否在使用的最新最好的库”,很多库的新版本已经解决了一些我以前遇到的问题,我下载了一些库的二进制版(bin),然后可以直接使用它里面的dll就可以了,连编译都不用了。

没有评论: