Qt 4.8.5 静态编译小结
2013-12-23 17:56
399 查看
Qt 4.8.5 静态编译
各处摘录.总结下.1.下载qt 的源代码qt-everywhere-opensource-src-4.8.5.zip,解压到路径任意,如d:\qt4
2.删除源码包中bin目录下的syncqt和syncqt.dat文件。如不修改将发生 Perl not found in environment - cannot run syncqt 错误。
如果有perl路径应该不需要这个步骤.(未验证没有perl的话是真的需要这个步骤)
3.修改\mkspecs\win32-msvc2010下的qmake.conf文件,将其中的
QMAKE_CFLAGS=-nologo -Zm200 -Zc:wchar_t-
改为:
QMAKE_CFLAGS=-nologo -Zm200 -Zc:wchar_t (注意末尾的”-“号区别)
为了更好的配合vc的whcar_t.
4.搜索整个qmake.conf文件,将-MD,-MDd对应改成-MT,-MTd,以实现在没有VC库的电脑也能运行Qt程序。
libc.lib libcd.lib libcmt.lib libcmtd.lib msvcrt.lib msvcrtd.lib
C-Release C-Debug /MT /MTd /MD /MDd
/NODEFAULTLIB:"libc.lib" /NODEFAULTLIB:"libcd.lib" /NODEFAULTLIB:"msvcrt.lib" /NODEFAULTLIB:"msvcrtd.lib" /NODEFAULTLIB:"libcmtd.lib" /NODEFAULTLIB:"libcmtd.lib"
-MT 需要在 QMAKE_LCLAGS_RELEASE 后增加
/NODEFAULTLIB:"libc.lib" /NODEFAULTLIB:"msvcrt.lib" /NODEFAULTLIB:"libcd.lib" /NODEFAULTLIB:"libcmtd.lib" /NODEFAULTLIB:"msvcrtd.lib"
-MTd 需要在 QMAKE_LFLAGS_DEBUG 后增加
/NODEFAULTLIB:"libc.lib" /NODEFAULTLIB:"msvcrt.lib" /NODEFAULTLIB:"libcd.lib" /NODEFAULTLIB:"libcmt.lib" /NODEFAULTLIB:"msvcrtd.lib"
这6个库其实只要用其中一个.不然会有重名冲突.
后记:在你以后的工程中可能需要增加的链接。
QMAKE_LIBS_CORE 中 ws2_32.lib
QMAKE_LIBS_GUI 中 imm32.lib winmm.lib
5.VS命令行窗口下进入刚才解压路径如d:\qt4,使用如下命令生成makefile
configure -opensource -confirm-license -release -static -fast -platform win32-msvc2010 -no-qt3support
-script -scripttools -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qt-sql-sqlite -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -nomake demos
-nomake examples -nomake docs -mp
静态库其实没必要使用-debug 需要的话使用动态debug库代替.
-debug-and-release -static表示静态编译debug与release版本Qt.-mp表示多核同时编译。
开启"-webkit"之后,编译的时候非常久,而且,中途出现报错,问题很多,建议不要开启了
(可以肯定的是,webkit根本不支持static编译,也就是configure指定了static的时候,这个就一定编译失败)
6. VS命令行窗口下 输入nmake, 开始编译过程,此过程依机器CPU水平决定时间多少,一般耗时约2hrs。如无错误提示即实现了静态编译 。
也可以使用Jom来加速编译.(不知道编译会不会有不同.) jom -j n
7.清理临时文件
这一步很重要,关系到是否能用qt-vs-addin。(据我测试4.8.5并无影响。)
目录下.qmake.cache和configure.cache这保存着你编译时的配置。
tmp子目录
lib子目录中的dll
运行QT助手,待更新索引后,删除doc\html和doc\src目录(如果不需要src的话)
清理编译生成的临时文件
del /s *.obj *.ilk *.exp *.pch *.cdf *.cache *.resources *.tlb *.tli *.tlh *.tmp *.rsp *.pgc *.pgd *.meta *.tlog *.manifest *.res *.idb *.rep
*.xdc *_manifest.rc *.bsc *.sbr *.metagen *.bi
8.在编译QT时,环境变量中只能存在一个QT目录,否则可能编译时出错。
9.在使用静态Qt库的时候可能出现错误(QtGui.lib(qwininputcontext_win.obj) : error LNK2019)
只要在工程的属性->Linker->Input->Additional Dependencies里,加入“imm32.lib;winmm.lib;Ws2_32.lib;”问题就解决了。地址
当然了,还有的问题就是静态编译的话,那些插件就不能以dll方式提供了。
Qt应用可以自动的识别那些可用的插件,因为插件被存储在标准的插件子目录下面。程序不需要任何代码来找寻和加载插件,因为Qt已经把这个过程内置了。
在开发过程中,插件目录默认为 QTDIR\plugins,并且所有的插件分别存储在不同的子目录中,例如styles,codecs。
如果你想让你的程序使用自定义的(可配置的)插件路径的话,那么请在程序启动时,读取Qsettings配置(其实就是自己定义一个配置)。
程序可以调用QCoreApplication::addLibraryPath()来使你的配置路径生效。(注意,插件类型目录是需要被保留的)。
Qt静态编译提供的插件有:
Plugin name | Type | Description |
qtaccessiblecompatwidgets | Accessibility | Accessibility for Qt 3 support widgets |
qtaccessiblewidgets | Accessibility | Accessibility for Qt widgets |
qdecorationdefault | Decorations (Qt Extended) | Default style |
qdecorationwindows | Decorations (Qt Extended) | Windows style |
qgif | Image formats | GIF |
qjpeg | Image formats | JPEG |
qmng | Image formats | MNG |
qico | Image formats | ICO |
qsvg | Image formats | SVG |
qtiff | Image formats | TIFF |
qimsw_multi | Input methods (Qt Extended) | Input Method Switcher |
qwstslibmousehandler | Mouse drivers (Qt Extended) | tslib mouse |
qgfxtransformed | Graphic drivers (Qt Extended) | Transformed screen |
qgfxvnc | Graphic drivers (Qt Extended) | VNC |
qscreenvfb | Graphic drivers (Qt Extended) | Virtual frame buffer |
qsqldb2 | SQL driver | IBM DB2 |
qsqlibase | SQL driver | Borland InterBase |
qsqlite | SQL driver | SQLite version 3 |
qsqlite2 | SQL driver | SQLite version 2 |
qsqlmysql | SQL driver | MySQL |
qsqloci | SQL driver | Oracle (OCI) |
qsqlodbc | SQL driver | Open Database Connectivity (ODBC) |
qsqlpsql | SQL driver | PostgreSQL |
qsqltds | SQL driver | Sybase Adaptive Server (TDS) |
qcncodecs | Text codecs | Simplified Chinese (People's Republic of China) |
qjpcodecs | Text codecs | Japanese |
qkrcodecs | Text codecs | Korean |
qtwcodecs | Text codecs | Traditional Chinese (Taiwan) |
#include <QtPlugin>
Windows下:
包含 lib
#pragma comment(lib, "qcncodecs.lib")
苹果下包含.a文件 libqcncodecs.a
/*或者gcc 编译包含.a*/
-lcncodecs
同时导入插件
Q_IMPORT_PLUGIN(qcncodecs)
10.编译完即可使用vs-addin实现Qt程序的编写,且编写好的程序无需任何dlls,只是容量较大,一个简单的程序也需要10+m的空间。这时可使用 UPX 来压缩exe文件,upx压缩一下3.7M+,压缩语句如下:
Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file..
Commands:
-1 compress faster -9 compress better
--best compress best (can be very slow for big files)
-d decompress -l list compressed file
-t test compressed file -V display version number
-h give this help -L display software license
Options:
-q be quiet -v be verbose
-oFILE write output to ` FILE '
-f force compression of suspicious files
--no-color, --mono, --color, --no-progress change look
Backup options:
-k, --backup keep backup files
--no-backup no backup files [ default ]
Overlay options:
--overlay=skip don't compress a file with an overlay
--overlay=copy copy any extra data attached to the file [ default ]
--overlay=strip strip any extra data attached to the file [dangerous]
Options for dos/exe:
--8086 make compressed exe work on any 8086
--no-reloc put no relocations in to the exe header
Options for dos/com:
--8086 make compressed com work on any 8086
Options for dos/sys:
--8086 make compressed sys work on any 8086
Options for djgpp2/coff:
--coff produce COFF output [ default : EXE]
Options for watcom/le:
--le produce LE output [ default : EXE]
相关文章推荐
- 使用VC2005编译真正的静态Qt程序
- 静态编译 Qt Desktop 4.8.1全过程
- VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布
- 静态编译QT应用程序
- VS2008纯静态编译QT4.8.0,实现VS2008编译调试Qt程序,QtCreator静态发布程序
- qt 静态编译
- Qt5.1 静态编译
- VS2012中使用编译的Qt-5.1.1静态库开发程序
- vs2013 静态编译Qt和配置方法
- Qt5.8 在windows下静态编译
- 用mingw4.8.2 静态编译QT5.3.1
- 如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC(调用静态插件)
- 使用VC2005编译真正的静态Qt程序
- 用mingw4.8.2 静态编译QT5.3.1
- VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
- QT5静态编译教程,主要针对vs2012
- [Qt4]编译64位Qt 4.8.5并配置到VS2010中使用
- 交叉编译Qt-4.8.5
- Qt5.9.1+mingw32静态编译
- Windows下MinGW编译静态Qt5 I