• 15312阅读
  • 38回复

[共享]Qt5.1.1 MinGW48 release静态版编译结果分享 [复制链接]

上一主题 下一主题
离线realfan
 

只看楼主 倒序阅读 楼主  发表于: 2013-09-02
— 本帖被 XChinux 执行加亮操作(2013-09-04) —
这是我编译好的静态release版,有需要的可以直接取用,7z压缩包,文件近90M
http://yunpan.cn/QGFvTKIxUMMsX
包含odbc,sqlite,没有webkit,解压后运行一下目录install.bat(该文件取自本站everplus,表示感谢)
如果要自己编译,可以参考下面的过程及需要的文件
一、文件准备
下面用到的文件,可以自行到相应官网下载。我在网盘上也共享了:
①    qt-windows-opensource-5.1.1-mingw48_opengl-x86-offline.exe
http://yunpan.cn/QGF2spMk8hM2Z
对于这里编译来讲,只是用里面的mingw。从搭建开发环境的角度,也需要装一个。
②  qt-everywhere-opensource-src-5.1.1.zip
http://yunpan.cn/QGF2jwaX7eYpI
③    Python3.3.2http://pan.baidu.com/share/link?shareid=3536585963&uk=673227135
如果不编译qtwebkit,就不用安装ActivePerl了。
二、安装
①    安装qt-windows-opensource-5.1.1-mingw48_opengl-x86-offline.exe,我是安装在C:\QT\Qt5.1.1
②    将qt-everywhere-opensource-src-5.1.1.zip解压到C:\QT\
③    安装Python3.3.2 C:\Python33
三、编译准备
编辑C:\QT\qt-everywhere-opensource-src-5.1.1\qtbase\mkspecs\win32-g++\qmake.conf
找到QMAKE_LFLAGS和QMAKE_LFLAGS_DLL,后面赋值为-static
QMAKE_LFLAGS        = -static
QMAKE_LFLAGS_DLL        = -static 保存,退出
(如果不做这个修改,生成的执行文件要依赖libgcc_s_dw2-1.dll,libstdc++-6.dll,libwinpthread-1.dll)
四、开始编译
开始==》程序==》Qt5.1.1==》5.1.1==》MinGW 4.8(32-bit)==》Qt 5.1.1 for Desktop (MinGW 4.8 32 bit)进入命令窗口,输入命令① cd C:\QT\qt-everywhere-opensource-src-5.1.1
② set path= C:\Python33;%path%
③ 配置configure -confirm-license -opensource -platform win32-g++ -release -static -ltcg -prefix "C:\QT\5.1.1-rel-static" -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtwebkit
④ 没出什么错误的话,mingw32-make
⑤  mingw32-make install好了,大功告成了。
在QtCreator中,加一个Qt Version,指定到 C:\QT\5.1.1-rel-static\bin\qmake.exe,就可以用了。这样,如果用动态的,就用qt-windows-opensource-5.1.1-mingw48_opengl-x86-offline.exe安装的,用静态的,就用自己编译的。


离线bearqq

只看该作者 1楼 发表于: 2013-09-08
已用,多谢
离线aresa
只看该作者 2楼 发表于: 2013-09-20
mingw32-make出一堆错误
离线aresa
只看该作者 3楼 发表于: 2013-09-20
好像是VC xstring里面的
离线realfan

只看该作者 4楼 发表于: 2013-09-21
回 2楼(aresa) 的帖子
具体什么错误,上面的过程是我验证了的。
离线rophie

只看该作者 5楼 发表于: 2013-09-22
为什么好多都是MinGW的,没有MSVC2010的啊?MinGW这么好用?
离线realfan

只看该作者 6楼 发表于: 2013-09-22
回 5楼(rophie) 的帖子
MinGW免费
不必为了个C++编译器,安装巨大的VC。
离线aresa
只看该作者 7楼 发表于: 2013-09-22
我用的VC6,机器上装的也有VS2010.
mingw32-make出一堆错误:看了前面一大部分错误都是VC6的VC98/include目录下的 XSTRING这个文件报的。怎么跑到VC6的目录下面去了?
离线realfan

只看该作者 8楼 发表于: 2013-09-23
回 7楼(aresa) 的帖子
设置路径时,把mingw相关路径放在前面试试。
离线skykingf

只看该作者 9楼 发表于: 2013-09-26
楼主 如何用它开发静态编译的程序呢?
离线bkey

只看该作者 10楼 发表于: 2013-09-26
有没有独立的mingw32-48呢
离线realfan

只看该作者 11楼 发表于: 2013-09-26
回 9楼(skykingf) 的帖子
选了静态的库,正常编译你的代码,生成的执行文件就可以独立运行了(插件处理,静态与动态有些差别)
离线liulun

只看该作者 12楼 发表于: 2013-10-03
用你云盘里提供的版本,编译出来的程序,错误提示:无法启动此程序,因为计算机中丢失了libgcc_s_dw2-1.dll。。。。。

release 编译的示例代码中的第一个示例,程序大小十三兆左右

如果是debug编译的话,直接编译不成功,提示: 错误:No rule to make target 'C:/Develop/5.1.1-rel-static/5.1.1-rel-static/lib/libQt5Widgetsd.a', needed by 'debug\application.exe'.
离线sword_zlg

只看该作者 13楼 发表于: 2013-10-09
正常使用,感谢楼主分享
我们的征途是星辰大海
离线roywillow

只看该作者 14楼 发表于: 2013-10-11
回 12楼(liulun) 的帖子
这个dll是mingw编译的程序所依赖的,与qt本身无关
lz也说了是release版,所以debug编译肯定跑不通的吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线facatcool
只看该作者 15楼 发表于: 2013-10-15
相对很多开源软件来说,Qt的编译是比较容易成功的。
离线zt449569708

只看该作者 16楼 发表于: 2013-10-18
老提示configure不是他的命令。。。
离线realfan

只看该作者 17楼 发表于: 2013-10-19
应该是路径不对吧
离线realfan

只看该作者 18楼 发表于: 2013-10-19
回 16楼(zt449569708) 的帖子
这种提示,应该是路径不对吧
离线thinkbad

只看该作者 19楼 发表于: 2013-10-22
webkit静态编译很困难吧?
离线170fangjun

只看该作者 20楼 发表于: 2013-11-21
我用的我装了 VC6,VS2005,VS2008 ,VS2010,VS2012
mingw32-make出一堆错误:看了前面一大部分错误都是VC6的VC98/include目录下的 XSTRING这个文件报的。怎么跑到VC6的目录下面去了?
遇到和7楼一样的问题。求指导。。。
离线170fangjun

只看该作者 21楼 发表于: 2013-11-25
后来我搞了个干净的虚拟机(XP系统),没有其他任何开发环境,编译通过。刚开始编译出来的程序在干净的机器上运行发现所有的ICO都不显示,后来在pro中加入qico就好了。
现在感觉静态的使用SQLLITE有点问题,以前能读到的现在读不到了?但是编译和运行又没错。。郁闷
离线realfan

只看该作者 22楼 发表于: 2013-11-26
回 21楼(170fangjun) 的帖子
我也在用Sqlite,没有问题。
静态与动态,使用Sqlite是不一样的,不知道你是否处理了:
在pro文件中,要加
QTPLUGIN += qsqlite

在main.cpp中加
#include<QtPlugin>
Q_IMPORT_PLUGIN(QSQLiteDriverPlugin)

再试试
离线jakes

只看该作者 23楼 发表于: 2013-11-29
编译部署QML程序出错。qml目录下面的Quick等module目录能上传一份吗?这里的.a根本用不了。
module "QtQuick" plugin "qtquick2plugin" not found
离线realfan

只看该作者 24楼 发表于: 2013-11-29
回 23楼(jakes) 的帖子
Qt有个bug,不能静态编译QtQuick程序,说是在5.2会修复
我试了5.2beta1,可以静态编译了。你可以试试
http://www.qtcn.org/bbs/read-htm-tid-55200.html
离线jakes

只看该作者 25楼 发表于: 2013-11-29
回 24楼(realfan) 的帖子
我就是用的这个版本静态编译,用的MinGW48 32B的编译器。但是运行就出现错误然后挂掉。我等5.2出来后再测试一下吧。
离线170fangjun

只看该作者 26楼 发表于: 2013-12-02
回 22楼(realfan) 的帖子
无需Q_IMPORT_PLUGIN(QSQLiteDriverPlugin)
只需要在pro里面这样写就行了
QT       += core gui sql
QTPLUGIN     += qico qsqlite
(我把DEBUG 也编译了,一共2G)
但是我现在又出了一个问题,MYSQL连接不上,而且只有静态版本链接不上。
我下了一个MYSQL-mysql-5.6.14-win32,然后
cmd  
cd C:\Qt\qt-everywhere-opensource-src-5.1.1\qtbase\src\plugins\sqldrivers\mysql
C:\Qt\5.1.1-rel-static\bin\qmake.exe "INCLUDEPATH+=E:/qt/mysql/include""LIBS+=E:/qt/mysql/lib/opt/LIBMYSQL.a" mysql.pro
然后编译出2个文件libqsqlmysql.a 和 libqsqlmysqld.a,我把这2个文件手动拷贝到C:\Qt\5.1.1-rel-static\plugins\sqldrivers目录下。
修改pro
QT       += core gui sql
QTPLUGIN     += qico qsqlite qsqlmysql
发现我OPEN 死活失败
后来我用动态的版本编译出qsqlmysql.dll 和 qsqlmysqld.dll 我发现可以链接数据库,打开成功。咋回事求解?
离线realfan

只看该作者 27楼 发表于: 2013-12-02
回 26楼(170fangjun) 的帖子
静态编译使用插件,就需要
在pro文件中,要加
QTPLUGIN += qsqlmysql

在main.cpp中加
#include<QtPlugin>
Q_IMPORT_PLUGIN(QMYSQLDriverPlugin)
动态就不用这句了,静态就要有
离线realfan

只看该作者 28楼 发表于: 2013-12-02
回 26楼(170fangjun) 的帖子
我用5.2rc1编译mysql始终没成功。目前未解决。
离线170fangjun

只看该作者 29楼 发表于: 2013-12-02
回 27楼(realfan) 的帖子
加了 Q_IMPORT_PLUGIN(QMYSQLDriverPlugin) 死活编译不过,300多个错误。
离线170fangjun

只看该作者 30楼 发表于: 2013-12-02
回 28楼(realfan) 的帖子
看了 5.0.1 的静态编译的那个帖子,版主说编译
configure -confirm-license -opensource -platform win32-g++ -release -static -ltcg -prefix "C:\QT\5.1.1-rel-static" -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtwebkit
这句 要加  -qt-sql-mysql 否者不会加载MYSQL驱动。不知道是否属实,正准备尝试
离线170fangjun

只看该作者 31楼 发表于: 2013-12-02
还想请教下,想要把DEBUG 和 release 都编译出来 是不是得写成
configure -confirm-license -opensource -platform win32-g++ -debug-and-release -static -ltcg -prefix "C:\QT\5.1.1-rel-static" -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtwebkit
离线170fangjun

只看该作者 32楼 发表于: 2013-12-02
如果不把DEBUG编译出来,没法调试,比较麻烦。。。
离线realfan

只看该作者 33楼 发表于: 2013-12-02
回 32楼(170fangjun) 的帖子
debug没有必要编译静态的,调试时,用qt 安装包的动态库就行了。debug静态生成的文件超大,动不动就一个exe就上百兆或几百兆。很慢的,根本没有必要。
离线realfan

只看该作者 34楼 发表于: 2013-12-02
回 31楼(170fangjun) 的帖子
是的,但真的没有必要编译Debug版的静态库。
离线realfan

只看该作者 35楼 发表于: 2013-12-02
回 29楼(170fangjun) 的帖子
大约是什么类型的错误?能贴上来一些吗只有静态编译才需要加这个。我一般加个开关控制。

pro文件中这样写
CONFIG(release, debug|release){
    CONFIG += static
}
CONFIG(debug, debug|release){
    CONFIG += shared
}
static{
    message("--static build--")
    DEFINES += QT_PLUGIN_STATIC_LINK
    QTPLUGIN += qsqlmysql
    QTPLUGIN += qsqlite
}


main.cpp加
#ifdef QT_PLUGIN_STATIC_LINK
    #include<QtPlugin>
    Q_IMPORT_PLUGIN(QSQLiteDriverPlugin)
    Q_IMPORT_PLUGIN(QMYSQLDriverPlugin)
#endif
离线170fangjun

只看该作者 36楼 发表于: 2013-12-02
回 35楼(realfan) 的帖子
类似于
qsql_mysql.cpp:-1: 错误:undefined reference to `mysql_num_rows@4'
qsql_mysql.cpp:-1: 错误:undefined reference to `mysql_stmt_num_rows@4'
qsql_mysql.cpp:-1: 错误:undefined reference to `mysql_num_rows@4'
qsql_mysql.cpp:-1: 错误:undefined reference to `mysql_stmt_num_rows@4'
qsql_mysql.cpp:-1: 错误:undefined reference to `mysql_stmt_insert_id@4'
qsql_mysql.cpp:-1: 错误:undefined reference to `mysql_insert_id@4'
...
离线170fangjun

只看该作者 37楼 发表于: 2013-12-03
搞定。。。。
离线170fangjun

只看该作者 38楼 发表于: 2013-12-03
如果有其他同学遇到这问题,参见30楼
快速回复
限100 字节
 
上一个 下一个