1. 先说明验证的Qt版本:Qt 5.9.9(qt-everywhere-opensource-src-5.9.9),Qt5的其他小版本应该也是类似的,但本人未做具体验证。
2.两个自己用过的编译Qt5静态库的configure命令参数。
configure -confirm-license -opensource -platform win32-msvc -debug-and-release -static -force-debug-info -prefix "D:\Qt\5.9.9_x64_static_vs2015_MD" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg -no-opengl -qt-freetype -nomake tests -no-compile-examples -nomake examples -skip webengine
configure -confirm-license -opensource -platform win32-msvc -debug-and-release -static -static-runtime -force-debug-info -prefix "D:\Qt\5.9.9_x64_static_vs2015_MT" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg -no-opengl -qt-freetype -nomake tests -no-compile-examples -nomake examples -skip webengine
3. 本文主题:“-static”和“-static-runtime”的区别。
(1)首先请看configure的帮助中的官方英文说明
-static .............. Build static Qt libraries [no] (yes for UIKit)
-static-runtime ...... With -static, use static runtime [no] (Windows only)
(2)本文重点--个人理解和解释一下(其实是走了弯路才回头检查发现的,之前是两个一起写的,想着保险嘛~_~)
-static:编译静态的Qt库,意思是编译出来只有Qt5Core.lib等静态库,而没有Qt5Core.dll等动态库,因此使用这些Qt库编译出来的程序,也就不存在依赖Qt的动态链接库。
-static-runtime:(可选的)随-static一起的选项,使用静态运行时(只对Windows系统)。重点解释下,所谓这个runtime(不准确地说)就是C语言运行库,具体到VS编译就是说msvcp*.dll等库,如果使用了这个选项,那么连C语言的运行时库也被编译成静态的,编译出来的可执行程序可以连C语言的动态库也不需要(特指Windows下的msvcp*.dll等库),也就是对应VS编译时的MT/MTd。如果不采用-static-runtime选项,那么对应VS编译时的MD/MDd。
解释地很啰嗦啦,但是想必看到这里,应该您已经明白了“-static”和“-static-runtime”的区别^_^