首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

发布MinGW QP 4.4.3-4,集成官方与TDM优点,交叉编译解决办法

2012-02-22 
发布MinGW QP 4.4.3-4,集成官方与TDM优点,交叉编译官方4.4.0的缺点:1. 头文件不能下断点;2. 跨模块(DLL)不

发布MinGW QP 4.4.3-4,集成官方与TDM优点,交叉编译
官方4.4.0的缺点:
1. 头文件不能下断点;
2. 跨模块(DLL)不能catch exception调试
官方4.4.0的优点:
1. 对dw-2异常处理做了完善
2. 对Windows平台的SEH处理进行了完善

MinGW TDM 4.4.1版本的优点:
1. 头文件可以下断点
2. 可以跨模块(DLL)catch exception调试
3. 支持大文件
4. 支持-std=c++0x选项,修正__STRICT_ANSI__后的编译错误
5. stack扩充到32MB
6. 其他,我解释不了的修正
MinGW TDM 4.4.1版本的缺点:
1. 官方版本的优点它没有

另,TDM和官方都有的缺点是:版本更新比较落后,目前GCC已经发布4.4.3了...
且,TDM和官方版本都在cygwin模拟环境下编译,需要针对编译环境打补丁。

为了集成这两个版本的优点,克服他们的缺点,我有了在Linux平台交叉编译4.4.3的想法,并且集成官方和TDM的所有优点,克服他们的所有缺点!

MinGW QP版本的优点:
1. 官方4.4.0的所有优点
2. TDM4.4.1版本的所有优点
MinGW QP版本的缺点:
不详,有待实践检验。欢迎使用,本人已用此编译器编译了wxWidgets2.8.10、Qt4.6.2、Code::Blocks、boost1.4.2,经测试无误,所有优点集成成功后才发布。

完整版,集成了mingw32-4.4.3-4-all cross build with archlinux (binutils-2.20.1-2,gdb-7.0.50,make-3.81,mingwrt-3.18,w32api-3.14,pthreads2.8,iconv_1.13.1,解压后即可使用。
下载地址:http://qp-gcc.googlecode.com/files/mingw32-4.4.3-4-all.7z

仅gcc_g++编译器:http://qp-gcc.googlecode.com/files/gcc_g%2B%2B-4.4.3-4.7z

附上我探索15天的交叉编译方法:

交叉编译核心参数解释:
--build = 软件在什么平台下编译
--host = 软件在什么平台下运行
--target = 软件为什么平台服务(仅限开发工具链)
host = 后面的参数是四个部分:
架构-厂商-内核-标准库
例如 arm-generic-linux-gnu 表示 arm 架构,generic 厂商,linux内核,gnu glibc 标准库。 

交叉编译器与target一致,比如去掉前面的i486-前缀,可以通过链接来实现,也可以自己编译。

C/C++ code
cd /usr/binsufor files in i486-mingw32-*; do ln -s $files ${files:5}; doneexit


一、编译gmp
C/C++ code
DIR=/home/loaden/AUR/mingw32ABI=32 ../../src/gmp-5.0.1/configure \    --host=mingw32 \    --target=mingw32 \    --build=i686-pc-linux-gnu \    --enable-cxx \    --disable-static \    --enable-sharedmake && make install prefix=$DIR/gmp && mingw32-strip $DIR/gmp/bin/*

二、编译mpfr
--with-gmp是必须的,否则无法生成DLL!
C/C++ code
DIR=/home/loaden/AUR/mingw32../../src/mpfr-2.4.2/configure \    --host=mingw32 \    --target=mingw32 \    --build=i686-pc-linux-gnu \    --with-gmp=$DIR/gmp \    --disable-static \    --enable-sharedmake && make install prefix=$DIR/mpfr && mingw32-strip $DIR/mpfr/bin/*


三、编译gcc
C/C++ code
# 给GCC源码打上补丁(在源码目录下执行)for files in ../patches/gcc*; do patch -p0 < $files; done# 在/mingw内建立链接(在编译目录下执行:可拷贝下列命令后同时执行)sudo mkdir /mingwsudo ln -s /usr/mingw32/include/ /mingw/includesudo ln -s /usr/mingw32/lib/ /mingw/lib# 定义变量DIR=/home/loaden/AUR/mingw32GCC_VER=4.4.3# 为libgomp配置pthread路径mkdir -p ./mingw32/libgompecho \CFLAGS=\"-I$DIR/pthreads/include -O2 -mthreads -D__USE_MINGW_ACCESS\"$'\n'\LDFLAGS=\"-L$DIR/pthreads/lib\"$'\n'\> ./mingw32/libgomp/config.cache# 导出环境变量export C_INCLUDE_PATH="$DIR/pthreads/include"export CPLUS_INCLUDE_PATH="$DIR/pthreads/include"export LIBRARY_PATH="$DIR/pthreads/lib"export LD_LIBRARY_PATH="$DIR/pthreads/bin"export CFLAGS="-I$DIR/pthreads/include -O2 -D__USE_MINGW_ACCESS"export BOOT_CFLAGS="-O2 -D__USE_MINGW_ACCESS"export CFLAGS_FOR_TARGET="-O2 -D__USE_MINGW_ACCESS"export CXXFLAGS="-I$DIR/pthreads/include -mthreads -O2 -D__USE_MINGW_ACCESS"export BOOT_CXXFLAGS="-mthreads -O2 -D__USE_MINGW_ACCESS"export CXXFLAGS_FOR_TARGET="-mthreads -O2 -D__USE_MINGW_ACCESS"export LDFLAGS="-s" BOOT_LDFLAGS="-s"export LDFLAGS_FOR_TARGET="-L$DIR/pthreads/lib -s"# 配置../../src/gcc-$GCC_VER/configure \    --prefix=/mingw \    --host=mingw32 \    --target=mingw32 \    --build=i686-pc-linux-gnu \    --enable-languages=c,c++ \    --enable-cxx-flags='-fno-function-sections -fno-data-sections' \    --enable-fully-dynamic-string \    --enable-version-specific-runtime-libs \    --enable-threads=win32 \    --enable-libgomp \    --disable-nls \    --disable-libstdcxx-pch \    --disable-win32-registry \    --disable-sjlj-exceptions \    --with-dwarf2 \    --with-gmp=$DIR/gmp \    --with-mpfr=$DIR/mpfr \    --with-pkgversion='QP MinGW32' \    --with-bugurl=http://www.qpsoft.com/blog/guestbook.phpmake# -Wl,...: 告诉GCC传递后面的选项给liker链接器# 加入--stack=0x2000000把stack设为32MB,解决可能的stack overflow。rm -f gcc/cc1.exe gcc/cc1plus.exemake install DESTDIR=$DIR LDFLAGS="-s -Wl,--stack=0x2000000" 




[解决办法]
4.4.3有啥改进?
[解决办法]
UP一下
[解决办法]
不是很懂

直接修改configure文件不行吗
[解决办法]
直接修改configure文件就行了
[解决办法]
别说了,编译Qt不是make不行就是找不到一些dll
[解决办法]
fasdasdfasdfsafsafsadfsafsdafsda
[解决办法]
支持大牛啊~~~~
~~~~~~~~~~~
[解决办法]
支持,狂顶老邓~~ ~
[解决办法]
厉害,好,mark 一下。
[解决办法]
支持~~~
回复内容太短了!
[解决办法]
对了,看到老邓的Archlinux后缀,突然想起来,楼主是不是就是在LinuxSir的Archlinux里狂顶KDE的那位?呵呵。
[解决办法]
 
QP是什么意思,在哪个版本的Linux,YMos可以吗?
[解决办法]
Thanks, Loaden.

Recommendation from Loaden, It must be classic.
[解决办法]
這個不頂不行。........
[解决办法]
我一直用gcc 4.4.3,没有发现你说的问题啊?
[解决办法]
顶一下,你太强了。。。。。。
[解决办法]
TCHAR TDM=TEXT("他的妈"); //???
[解决办法]
我仔细的看了一下,居然连标准C++的头文件都没有,还谈甚么C++0x,真是搞不懂啊。
[解决办法]
呵呵是我搞错了有C++头文件和库,但是仅仅解压是没法用的。需要配置一下。
[解决办法]
呵呵,终于认出了两个混linuxsir的了
[解决办法]
up 回复内容太短了! 

[解决办法]
up 回复内容太短了!
[解决办法]
LZ是我的偶像啊,尤其是对于这些比较基础的东西的鼓捣上
[解决办法]
直接修改configure文件,再试试啊
[解决办法]
在cmd.bat内添加如下一行:“set CPLUS_INCLUDE_PATH=%CD%\lib\gcc\mingw32\4.4.3\include\c++”,即可编译C++程序了。
[解决办法]
支持大牛Loaden.
[解决办法]
学习.
回复内容太短了! 

[解决办法]
dingding支持
[解决办法]
这个要支持。。。话说官方的正式版还是3.4.5的。。。
------解决方案--------------------


路过。。。。。。。。。。。。。。。。。灌水
[解决办法]
Loaden真是牛人呀,在wxWidgets中文论坛也常见到你的身影。顶你!
[解决办法]
不曾用到这个
[解决办法]

探讨
我在交叉编译的时候,还碰到过提示文件格式不对的情况。
现在你一说,我觉得那个libgomp.lib本来应该是libgomp.dll,是这个意思吧。
那为什么会交叉编译成功了呢?

看官方介绍,libstdc++在4.5时支持静态库了。
能否介绍一下:libstdc++为什么现在不能使用静态库?

[解决办法]
up~~
[解决办法]
这个的确要折腾很久 
希望能不断完善
支持loaden

[解决办法]
哦 明白了

[解决办法]
学习了,多发着方面的贴就好了,谢谢

[解决办法]
对STL并不懂,学习了。
[解决办法]
mark~~~~~~~~~~~~~~~~~~~~~~
[解决办法]
支持~~~~~~~~~~~~~
[解决办法]

[解决办法]
探讨
支持大牛啊~~~~
~~~~~~~~~~~

[解决办法]
这个得支持一下。
[解决办法]
这东西还可以
[解决办法]
支持。
据说open Watcom 更高效一些。
[解决办法]
支持一下楼主

热点排行