mingw32

前两天装上的F11,一大亮点就是Windows的交叉编译工具MinGW。决定尝试用MinGW编译Qt4程序。于是昨天去下载MinGW
#yum install mingw* -y

里面大部分库都是几百K,大的有上兆的,除了Qt库,100M。汗,Qt不愧是个万能库……电脑开了一宿,早上起来爽爽的看见 “Complete!”。这时默认的PATH下多了几个可执行文件,我就记住了mingw32-configure和mingw32-make,因为Qt 用qmake生成Makefile,不用configure,所以我没有用到mingw32-configure。打开控制台,进入一个Qt工程里,这时才发现不知道怎么qmake,因为默认的qmake生成的是用GCC编译连接的。于是又用yumex查看mingw32-qt-qmake的已安装文件,发现有一个/usr/lib/qt4/mkspecs/fedora-win32-cross/qmake.conf,嗯,应该就是用它了。于是:
$qmake-qt4 -spec /usr/lib/qt4/mkspecs/fedora-win32-cross

果然很顺利,生成了Makefile和Makefile.Release还有Makefile.Debug。接着:
$mingw32-make

咦,出错了……是连接的时候找不到“-lQtGui”。查看连接参数,找到“-L/usr/lib/i686-MinGW(后面忘记怎么拼了……) /sysroot/lib”,于是进入这个文件夹,看到有“libQtCore4.a”、“libQtGui4.a”什么的,所以有两种办法解决连接问题:
1.一劳永逸法
就是在那个文件夹里建立符号链接,增加libQtCore.a==>libQtCore4.a什么的
2.临时修改法
不去建立符号链接,直接修改Makefile。打开Makefile.Release,找到链接参数LFLAGS那一行,把后面的“-lQtGui”改成 “-lQtGui4”,所有用到的Qt连接库都这样修改,加个4就OK了。

之后再$mingw32-make,嗯这回成功了。不过编译出来的文件就几十K,所以知道它用的是动态库。把exe文件copy到windows上,接着去/usr/lib/i686-Min……/sysroot/bin,把里面的dll文件都copy到windows上去。重启进入Windows。注意,如果直接运行那个exe文件,会提示缺少MSVCP80.DLL和MSVCR80.DLL,下载之后又说无法定位程序入口点。我几经折腾,发现不要管这个提示,不需要这两个dll的。把libgcc_s_sjlj-1.dll、mingwm10.dll还有用到的Qt库dll(比如 QtCore4.dll什么的)copy到exe文件的目录中,运行,已经可以运行了,就是GUI程序总是多一个控制台窗口。去看Qt4 Assisstant,发现编写Windows程序的时候应该在.pro文件中指定是窗口程序还是控制台程序。于是再回到F11,修改.pro文件,增加一行:
CONFIG += windows

再重新qmake、编译,但是出来的exe文件还没有改变。思考了良久,发现qmake的时候应该用win32模式:
$qmake-qt4 -spec /usr/lib/qt4/mkspecs/fedora-win32-cross -win32

这样再编译,出来的exe文件总算没有那个控制台了^o^

总结一下,交叉编译Windows平台的Qt4程序的步骤:
1.写代码,可以在native Linux上编译、调试
2.修改.pro文件,增加:
CONFIG += windows
3.执行:
$qmake-qt4 -spec /usr/lib/qt4/mkspecs/fedora-win32-cross -win32
4.修改Makefile.Release,找到LFLAGS = …… -lQtCore那些,把-lQtCore改成-lQtCore4,后面的-l参数类似。
5.执行:
$mingw32-make
6.发布exe文件,和libgcc_s_sjlj-1.dll、mingwm10.dll还有Qt*.dll(根据用到的库而定,比如用到 QtCore、QtGui、QtNetwork就发布QtCore4.dll、QtGui4.dll、QtNetwork4.dll)。那些dll文件在 /usr/lib/i686-mingw……(忘记全称了:-[)/sysroot/bin下面
7.就可以在Windows上运行啦^^

04-03
### 关于 MinGW32 的下载与使用说明 #### 一、MinGW32 是什么? MinGW32 是 Minimalist GNU for Windows 工具链的一部分,专为构建 32Windows 应用程序而设计。它提供了一组基于 GCC 的编译器以及链接器和库文件,使得开发者能够在 Windows 平台上利用类 Unix 开发工具流来编写、编译和调试 C/C++ 程序[^3]。 #### 二、MinGW32 的特点 MinGW32 支持大部分 Win32 API 功能,因此其生成的应用程序无需依赖额外的第三方动态链接库即可独立运行。这使其成为 Visual Studio 编译器的一种轻量级替代方案[^2]。 #### 三、如何下载 MinGW32? 可以从官方推荐的源码托管平台 SourceForge 上获取最新的 MinGW-w64 版本(兼容 32 和 64 位)。尽管名称中有“w64”,但它同样包含了针对 32 位系统的工具链选项[^1]。具体操作如下: 1. **访问官方网站** 打开 [SourceForge](https://sourceforge.net/projects/mingw/) 页面并查找适合您需求的发行包。 2. **选择合适的版本** 对应 32 位开发环境,请确认下载的是 `i686` 架构对应的安装文件。 3. **完成安装向导** 安装过程中需指定目标路径,默认会创建必要的目录结构用于存储头文件、静态/共享库及可执行组件等资源。 #### 四、基本配置步骤 为了使 MinGW 正常工作,在本地计算机设置好相应的环境变量至关重要。 -MinGW bin 文件夹加入 PATH 中以便命令行能够识别 gcc/g++ 命令; ```bash set PATH=%PATH%;D:\path_to_mingw\bin\ ``` - 测试安装是否成功可以尝试查看版本号: ```bash gcc --version g++ --version ``` 如果显示类似下面的信息,则表明已正确部署完毕: ``` gcc (MinGW.org GCC-8.2.0-3) 8.2.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions... ``` #### 五、简单示例:编译 Hello World 程序 假设有一个名为 hello.c 的源代码文件内容如下所示: ```c #include <stdio.h> int main() { printf("Hello, world!\n"); return 0; } ``` 通过终端切换至该脚本所在位置后输入以下指令实现编译过程: ```bash gcc -o hello.exe hello.c ``` 最后运行生成的目标文件验证成果: ```bash hello.exe ``` 上述流程展示了从零开始搭建基础 C/C++ 跨平台编程框架的过程[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值