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 库的定义 库文件是一 ...
随机推荐
- 配置JDKAndroid 2D游戏引擎AndEngine
配置JDKAndroid 2D游戏引擎AndEngine JDK全称为Java Development Kit(也即Java开发包),是用于支持Java 编程的基础.无论是什么编程,只要用到了Java ...
- http://jingyan.baidu.com/article/86112f13582848273797879b.html
http://jingyan.baidu.com/article/86112f13582848273797879b.html
- BZOJ3833 : [Poi2014]Solar lamps
首先旋转坐标系,将范围表示成矩形或者射线 如果范围是一条线,则将灯按y坐标排序,y坐标相同的按x坐标排序, 对于y相同的灯,f[i]=min(i,它前面灯发光时刻的第k[i]小值), 线段树维护,$O ...
- 转 Web移动应用调试工具——Weinre
如今人们也越来越习惯在手机上浏览网页,而在手机上这些针对桌面浏览器设计的网页经常惨不忍睹.Web应用开发者需要针对手机进行界面的重新设计,但是手机上并没有称心如意的调试工具(如Firebug.web ...
- 更新Android SDK之后Eclipse提示ADT版本过低的一个简易解决办法
首先说明一下发表这一篇博文的“历史原因”吧,因为在更新SDK之后,进入Eclipse设置Android SDK目录的时候,会突然说我的版本低什么的,尝试自己解决但失败之后,我在搜索引擎上找了很多中文的 ...
- Log4j日志级别
日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level). 日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4 ...
- Shell 操作练习2
#! /bin/sh ############################### # -- # # author jackluo # # net.webjoy@gmail.com # ###### ...
- vim 配置 设置搜索 高亮
1.可以修改配置文件在~/.vimrc 文件中添加一行 set hlsearch 2.也可以直接在当前编辑环境里使用:在当前环境中执行如下命令 :set hlsearch 作者:风波 mail:fen ...
- Android jni开发资料--NDK环境搭建
谷歌改良了ndk的开发流程,对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK.而在NDKr7开始,Google的Windows版的NDK ...
- 【iHMI43 4.3寸液晶模块】demo例程(版本1.00)发布
============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...