Fedora 11中用MinGW编译Windows的Qt4程序(在Linux系统下编译Windows的程序)
Ubuntu下可以直接安装:
sudo apt-get install mingw32 mingw32-binutils mingw32-runtime
安装后编译程序可以:
i586-mingw32msvc-g++(编译C++程序)
i586-mingw32msvc-gcc(编译C程序)
用法和gcc/g++非常类似。
如hello.c程序:
<ccid_nobr>
<ccid_code>
#include
int WINAPI WinMain (HINSTANCE hInstance,
|
编译:
i586-mingw32msvc-gcc hello.c -o hello.exe -mwindows
注:-mwindows指示其编译的是windows程序,若编译的是console(命令行)程序,则不需要这个参数。
若安装了wine,还可以测试一下这个程序:
wine hello.exe
-----------------------------------------------------------------------------
Fedora 11中用MinGW编译Windows的Qt4程序 琢磨了一上午,六级就放弃了……
前两天装上的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上运行啦^^
苍天保佑我的六级能过……唉,准备明年接着考……
http://www.programgo.com/article/11693899416/
http://tieba.baidu.com/p/733815195
Fedora 11中用MinGW编译Windows的Qt4程序(在Linux系统下编译Windows的程序)的更多相关文章
- Linux系统下安装windows字体笔记
源文档地址:https://www.e-iceblue.cn/spiredocforjavaconversion/word-to-pdf-font-issue.html windows字体路径:C:\ ...
- Mingw:在Linux系统下编译Windows的程序
Ubuntu下可以直接安装: sudo apt-get install mingw32 mingw32-binutils mingw32-runtime 安装后编译程序可以: i586-mingw32 ...
- linux系统下挂载windows共享目录
在工作中有时我们需要在linux上挂载windows共享目录.首先我们需要学会在linux上查看windows共享了那些目录.查看操作需要安装samba-client. [root@ ~]# yum ...
- Linux系统下编译连接C源代码
gcc test.c -o test 一步到位的编译指令 得到 test 文件 gcc test.c 得到 test.out 文件 gcc -g -c test.c -o test 只生成目标文件(. ...
- Linux系统GEDIT编译运行C++
作为NOIP第一年强制使用Linux系统的考生,真的很难受,被迫还要学一波Linux系统. 正常的Windows对于较基础的程序员来说非常方便好用,但是对于高级程序员来说就是一个坑,于是就有了Linu ...
- linux系统下,11款常见远程桌面控制软件
linux系统下,11款常见远程桌面控制软件 一. Grdc 它是一个用GTK+编写的,适用于gnome桌面环境的远程桌面访问软件.看图: 常见功能: 1.提供全屏,窗口化的远程控制.支持高分辨率下的 ...
- 在Linux Mint13下编译安装mono运行时
最近一直想体验下mono在web开发上到底进展到什么程度,挑战一下它对web开发的极限.因为asp.net mvc本身依赖windows平台的东西不太多,所以这些assembly移植到mono/lin ...
- linux系统下,11款常见远程桌面控制软件(转载)
远程控制能够给人们带来很多便利,本文介绍了11款常见的Linux系统下的远程桌面控制工具,总有一款能适合您. 一. Grdc 它是一个用GTK+编写的,适用于gnome桌面环境的远程桌面访问软件.看图 ...
- 【转帖】Windows与Linux系统下的库介绍
Windows与Linux系统下的库介绍 http://embeddedlinux.org.cn/emb-linux/entry-level/200903/12-553.html 库的定义 库文件是一 ...
随机推荐
- Linphone iOS客户端编译时打开G729支持
Assuming you were able to compile the SDK and the linphone XCode project, here is what you need to d ...
- C# MarshalByRefObject 和Serializable的区别
这两种方式的类一般都是用于远程传输时使用. marshalbyrefobject是通过引用传递serializable是通过值传递,现在就来分析下什么是引用传递,什么是值传递. 理解这个对Remoti ...
- Spring的属性编辑器
bean类 import java.util.Date; public class Bean { private Date date; public Date getDate() { return d ...
- extjs 远程数据源
1本地数据源组合框 Ext.onReady(function(){ //创建数据模型 Ext.regModel('PostInfo', { fields: [{name: 'province'}, { ...
- javascript继承扩展类方法实现
javascript没有原生的继承语法,这确实很让人困惑,但是广大人民群从的智慧是无穷的.最近呢,正尝到一点从源码中学习的甜头,不分享一下实在难以平复激动的心情.前不久改造视频播放插件的时候,找到了v ...
- 【BZOJ】2946: [Poi2000]公共串
http://www.lydsy.com/JudgeOnline/problem.php?id=2946 题意:给n个串,求最大公共子串.(1<=n<=5,每个串长度<=2000) ...
- POJ 1625 Censored!(大数+DP)
题目链接 这题,真心木啥意思,就是数据里貌似字符有负数,注意gets读入.. #include <iostream> #include <cstring> #include & ...
- JBPM4.4+SSH 整合配置及完整实例
整合jBPM4.4+ssh过程(spring接管struts2和hibernate,例中都整合在application.xml中,没有单独的jbpm.hibernate.cfg.xml): 1.在se ...
- [转]一步一步asp.net_购物车订单与支付宝
本文转自:http://www.cnblogs.com/mysweet/archive/2012/05/19/2508534.html 最近这几天很忙,一边忙着准备一堆课程设计(8门专业课.....伤 ...
- Shrink磁盘
30857(分区的总容量) = 10160(可修改的这个10610表示Shrink之后的空闲分区) + 20697(Shrink之后分区中占用掉的容量)