静态编译 Qt Desktop 4.8.1全过程

从网上找了很多的介绍,终于完成了编译,作个总结


1)去 releases.qt-project.org/qt4/source/ 下载并安装 qt-win-opensource-4.8.1-mingw.exe,安装的时候注意指定mingw所在目录。如果没有安装mingw,先下载并解压mingw

2) 编辑 C:\Qt\4.8.1\mkspecs\win32-g++\qmake.conf 文件 把 QMAKE_LFLAGS =
                         改为:QMAKE_LFLAGS = -static
然后将下面一行:
QMAKE_LFLAGS_DLL        = -shared
修改为:
QMAKE_LFLAGS_DLL        = -static


Edit <QTDIR>\qmake\Makefile.win32* files:

Change

   LFLAGS =

to (add -static-libgcc)

   LFLAGS = -static-libgcc

3)添加mysql支持
先根据 hi.baidu.com/llydmissile/item/b484c88a81adecded1f8cd3f 文章的描述获得mysql的头文件和 libmysql.a & libmysql.def。 然后需要告诉编译器mysql的文件在什么地方,
编辑C:\Qt\4.8.1\src\sql\Makefile.Release 文件,
INCPATH =………… 后面附加 -I"C:\MYSQL\INCLUDE"
LIB = …………后面附加 -LC:\MYSQL\LIB\ -lmysql
保存.

然后把C:\MySQL\lib 目录下的libmysql.a, libmysql.def, libmysql.dll, libmysql.lib等文件复制到C:\Qt\4.8.1\lib 目录下

4)首先确保perl已经安装
打开qt4.8.1环境的命令提示符,默认进入C:\Qt\4.8.1目录。运行  
set PATH=%path%;C:\MySQL\lib;C:\Perl\site\bin;C:\Perl\bin;


((((((don't use this)))))configure -debug-and-release -static -fast


configure -static -release -no-exceptions -qt-sql-mysql


然后   mingw32-make sub-src
如果编译中发现配置有错造成编译停止,使用mingw32-make confclean删除配置,再重新运行configure
如果不是配置造成的错误,修正错误后再次运行mingw32-make sub-src即可,编译器会回到上次出错处继续编译

5)

 应用程序编译时,也需要在.pro文件中加入以下代码:
    static { # everything below takes effect with CONFIG += static
CONFIG += static
CONFIG += staticlib # this is needed if you create a static library, not a static executable
DEFINES += STATIC message("~~~ static build ~~~") # this is for information, that the static build is done
mac: TARGET = $$join(TARGET,,,_static) #this adds an _static in the end, so you can seperate static build from non static build
win32: TARGET = $$join(TARGET,,,s) #this adds an s in the end, so you can seperate static build from non static build
}
然后,在Projects中设置Build steps -> qmake 的附加选项 CONFIG+=static。(llyd注:事实证明这一步并不需要)
此处的静态编译是针对QT的动态连接库,因此,仍然需要附加不属于QT部分的dll,例如:基于线程的mingwm10.dll和libgcc_s_dw2-1.dll

   ps:.pro中的代码是否必要未验证(反正我加上了,可以运行,不知道不加上可不可以...)

llyd注, DEFINES += STATIC message这一行好像不被识别,删掉就行了

6)编译出的qt版本可以整合到qt sdk 中的qt creator中,工具菜单- 选项... - 左边的构建和运行 - Qt版
本选项卡,点击添加,定位到C:\qt\4.8.1\bin\qmake.exe,确认即可。版本名称可以自己随便取

release编译出的可执行文件比较大,可以strip一下exe、在upx一下exe和dll,体积会非常小。

GNU 二进制实用程序Binutils (GNU binary utilities)包括:objdump、readelf、addr2line、strip、ar、nm、ldd、ngprof、gcov等。

这个我还没有测试。


你可能感兴趣的:(mysql,Desktop,qt,静态编译)