欢迎来到天天文库
浏览记录
ID:15580550
大小:294.00 KB
页数:20页
时间:2018-08-04
《windows下qt静态编译连接和dll依赖问题解决》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Windows下Qt静态编译连接和生成程序的mingwm10.dll、libgcc_s_dw2-1.dll依赖问题解决本文编写和程序配置调试:蔚蓝(winland0704@126.com)http://hi.baidu.com/winland0704/home一、官方Qt库-MinGW版本(QtCreator)静态编译和DLL依赖解决1、MinGW版本(1)MinGW官方版本(gcc-4.5.2)使用dwarf2异常处理,默认使用动态C运行时库,默认生成的程序依赖:libgcc_s_dw2-1.dll(105K)libstdc++-6
2、.dll(860K)使用参数-static可以解除对以上dll依赖。现在新版MinGW生成的程序默认已经不依赖mingwm10.dll了。(2)TDM-GCC版本(Codelite和CodeBlocks带的,gcc-4.4.1)使用sjlj异常处理,默认使用静态C运行时库,默认生成的程序独立运行,无dll依赖问题。(3)MinGWDistro-nuwen.net最新版本(gcc4.6.0)使用dwarf2异常处理,默认使用静态C运行时库,无DLL依赖问题。(4)QP-GCC版本(gcc-4.4.5)使用dwarf2异常处理,默认使用静
3、态C运行时库,无DLL依赖问题。(5)PCX版本,包括32bit和64bit版本的MinGW(最新有gcc4.6测试版)与(4)差不多,无DLL依赖问题。(6)Qt库自带的MinGW(gcc-4.4.0)GCC配置信息:D:Qt2011qt>gcc-vUsingbuilt-inspecs.Target:mingw32Configuredwith:../gcc-4.4.0/configure--enable-languages=c,ada,c++,fortran,java,objc,obj-c++--disable-sjlj-exc
4、eptions--enable-shared--enable-libgcj--enable-libgomp--with-dwarf2--disable-win32-registry--enable-libstdcxx-debug--enable-version-specific-runtime-libs--prefix=/mingw--with-gmp=/mingw/src/gmp/root--with-mpfr=/mingw/src/mpfr/root--build=mingw32Threadmodel:win32gccversio
5、n4.4.0(GCC)Qt带的这个MinGW比较老,gcc-4.4.0版,使用dwarf2异常处理,默认使用动态C运行时库。编写helloworld控制台程序,main.cpp#include#include#includeusingnamespacestd;intmain(intargc,char**argv){printf("HelloWorld!");cout<<"HelloWorld!";system("PAUSE");return0;}①编译命令:g++-ohel
6、lo.exemain.cpp-mthreads依赖DLL:mingwm10.dll(12KB)libgcc_s_dw2-1.dll(42KB)生成的hello.exe有3.59MB。很大,莫名其妙。②编译命令:g++-ohello.exemain.cpp依赖DLL:libgcc_s_dw2-1.dll(42KB)生成的hello.exe有3.58MB。③编译命令:g++-ohello.exemain.cpp-static依赖DLL:无。生成的hello.exe有3.67MB。④编译命令:g++-ohello.exemain.cpp-m
7、threads-static依赖DLL:mingwm10.dll(12KB)生成的hello.exe有3.68MB。最后一个命令我们看到一个有意思的现象,Qt带的这个MinGW的gcc-4.4.0里压根没有mingwm10.dll对应的静态库版本,所以存在-mthreads参数时,不管怎么用-static参数,它总是需要动态库mingwm10.dll,这就是官方Qt让人纠结的地方。只要使用它自带的MinGW,在-mthreads参数启用时,你不管怎么搞,生成的exe必定依赖mingwm10.dll,怎么搞都搞不掉,这就是官方Qt库让人
8、抓狂的地方。网上有人说自己编译qt库,去掉-mthreads来编译自己qt库,当然不推荐这种搞法。还有使用-no-exceptions配置来编译qt库,这也不好,异常处理都搞没了。mthreads是多线程异常处理安全库,
此文档下载收益归作者所有