MinGW版本-wxWidgets库编译安装和生成程序DLL依赖问题解决电子教案.doc

上传人:1595****071 文档编号:51428319 上传时间:2022-10-18 格式:DOC 页数:32 大小:197.50KB
返回 下载 相关 举报
MinGW版本-wxWidgets库编译安装和生成程序DLL依赖问题解决电子教案.doc_第1页
第1页 / 共32页
MinGW版本-wxWidgets库编译安装和生成程序DLL依赖问题解决电子教案.doc_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《MinGW版本-wxWidgets库编译安装和生成程序DLL依赖问题解决电子教案.doc》由会员分享,可在线阅读,更多相关《MinGW版本-wxWidgets库编译安装和生成程序DLL依赖问题解决电子教案.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Good is good, but better carries it.精益求精,善益求善。MinGW版本-wxWidgets库编译安装和生成程序DLL依赖问题解决-MinGW-GCC版本、wxWidgets库编译安装和生成程序的mingwm10.dll、libgcc_s_dw2-1.dll依赖问题解决本文编写和程序配置调试:蔚蓝(winland0704)一、MinGW发行版维基百科:MinGW(MinimalistGNUforWindows),又称Mingw32,是将GNU开发工具移植到Win32平台下的产物,包括一系列头文件(Win32API)、库和可执行文件。MinGW是从Cygwin(

2、1.3.3版)基础上发展而来,但是用MinGW使用Windows中的C运行库。因此用MinGW开发的程序不需要额外的第三方DLL支持就可以直接在Windows下运行,而且也不一定必须遵从GPL许可证。这同时造成了MinGW开发的程序只能使用Win32API和跨平台的第三方库,而缺少POSIX支持1,大多数GNU软件无法在不修改源代码的情况下用MinGW编译。官网:http:/www.mingw.org/现在已经有MinGW-w64-for32and64bitWindows项目,可以为为64位Windows提供开发环境。64位版本仍在开发中,有测试版本放出。除了官方编译的MinGW-GCC版本,

3、还有其他人员自己重新编译打包的发行版,本文中介绍其中的几个。1、MinGW官方版本网址:/bin包含动态库:libgcc_s_dw2-1.dll105KBmingwm10.dll24KBlibstdc+-6.dll860KBGCC配置信息:Usingbuilt-inspecs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=c:/omingw/bin/./libexec/gcc/mingw32/4.5.2/lto-wrapper.exeTarget:mingw32Configuredwith:./gcc-4.5.2/configure-enable-languages=c

4、,c+,ada,fortran,objc,obj-c+-disable-sjlj-exceptions-with-dwarf2-enable-shared-enable-libgomp-disable-win32-registry-enable-libstdcxx-debug-enable-version-specific-runtime-libs-disable-werror-build=mingw32-prefix=/mingwThreadmodel:win32gccversion4.5.2(GCC)2、TDM-GCC(CodeBlocks和CodeLite带的)网址:http:/tdm-

5、/bin包含动态库:libgcc_s_sjlj-1.dll234KBmingwm10.dll18KBGCC配置信息:Usingbuilt-inspecs.Target:mingw32Configuredwith:././gcc-4.4.1/configure-prefix=/mingw-build=mingw32-enable-languages=c,ada,c+,fortran,objc,obj-c+-disable-nls-disable-win32-registry-enable-libgomp-enable-cxx-flags=-fno-function-sections-fno-da

6、ta-sections-disable-werror-enable-threads-disable-symvers-enable-version-specific-runtime-libs-enable-fully-dynamic-string-with-pkgversion=TDM-2mingw32-enable-sjlj-exceptions-with-bugurl=Threadmodel:win32gccversion4.4.1(TDM-2mingw32)3、MinGWDistro-最新版本网址:/bin包含动态库:mingwm10.dll27KBGCC配置信息:Target:i686-

7、pc-mingw32Configuredwith:./src/configure-prefix=/c/temp/gcc/dest-enable-languages=c,c+-with-arch=i686-with-tune=generic-disable-libstdcxx-pch-disable-nls-disable-shared-disable-sjlj-exceptions-disable-win32-registry-enable-checking=release-disable-ltoThreadmodel:win32gccversion4.6.0(GCC)4、QP-GCC版本网址

8、:这个和后面的PCX版本都是国人弄的,链接库全是静态编译的版本,很好使,编译出来的程序只需要一个exe就可以了。QP版的是CSDN上的Loaden(老邓)大侠弄得:/bin包含动态库:mingwm10.dll24KBGCC配置信息:Usingbuilt-inspecs.Target:i686-mingw32Configuredwith:././src/gcc-4.4.5/configure-prefix=/mingw-host=i686-mingw32-target=i686-mingw32-build=i686-pc-linux-gnu-enable-languages=c,c+-enabl

9、e-static-enable-cxx-flags=-fno-function-sections-fno-data-sections-enable-fully-dynamic-string-enable-version-specific-runtime-libs-enable-threads=win32-enable-libgomp-enable-libiconv-disable-shared-disable-nls-disable-werror-disable-libstdcxx-pch-disable-win32-registry-disable-sjlj-exceptions-with-

10、dwarf2-with-gmp=/home/loaden/AUR/mingw32/depends-with-mpfr=/home/loaden/AUR/mingw32/depends-with-pkgversion=QPMinGW32-with-bugurl=http:/qp-Threadmodel:win32gccversion4.4.5(QPMinGW32)5、PCX版本,包括32bit和64bit版本的MinGW网址:MinGW_gcc4.5.3.20110317_static_win64.7zMinGW_gcc4.5.3.20110324_static_win32.7z项目主页还有Co

11、de:Blocks静态编译的打包,以及Code:Blocks+静态MinGW的合集包。未测试,应该和QPGCC版本差不多。这个版本已经更新到GCC4.6的测试版本了。二、MinGW生成程序的(mingwm10.dll,libgcc_s_dw2-1.dll)DLL依赖问题及解决1、各版本MinGW生成helloworld程序测试代码main.cpp:#include#include#includeusingnamespacestd;intmain(intargc,char*argv)printf(HelloWorld!n);coutEnvironmentVariables:Environment

12、Variables对话框中,把WXWIN路径改成新的:D:wxWidgets-2.8.12并把PATH和WXCFG里的gcc_dll改成gcc_lib。第二处:Settings菜单-TagsSettings:在TagsOptions对话框里,选中左边IncludeFiles,把老版的wxinclude目录删掉,上面列表加上新的:D:wxWidgets-2.8.12include下面列表加上新的:D:wxWidgets-2.8.12includewxunivD:wxWidgets-2.8.12includewxunix然后重启CodeLite。wxHello对话框(就一个框,一个OK按钮,一个C

13、ancel按钮),编译生成后:Debug版本:28MBRelease版本:1.94MB这个debug版够大的,wxWidgets大概就这样吧。这里生成的exe都是独立运行的,不需要mingwm10.dll,不需要libgcc_s_dw2-1.dll或libgcc_s_sjlj-1.dll。也不需要wxWidgets的dll动态库。4、wxWidgets库编译安装(QP-GCC编译环境)和去DLL依赖与上面类似:QP-MinGW目录在:D:MinGWwx目录在D:wxWidgets-2.8.12设置cmd编译环境setPATH=D:MinGWbin;%PATH%设置wxWidgets-2.8.1

14、2的编译配置文件:D:wxWidgets-2.8.12buildmswconfig.gcc改为:SHARED?=0UNICODE?=1BUILD?=debugRUNTIME_LIBS?=dynamic编译生成wx静态库$cd/dD:wxWidgets-2.8.12buildmsw$make-fmakefile.gcc编译好debug版静态wx库后,再修改config.gcc为SHARED?=0UNICODE?=1BUILD?=releaseRUNTIME_LIBS?=dynamic然后编译:$make-fmakefile.gcc等编译好后,debug和release静态库就都可以用了。测试,C

15、odeLite不好弄,因为要换MinGW,搞挂了。所以换了CodeBlocks最简版的,不带MinGW。然后自己设置MinGW路径,还有wx路径,还不错,设置好路径就可以跑程序。程序使用codeblocks自动生成的wxWidget对话框,跑的不错。都可以独立运行,不需要其他DLL。Debug版本:28.7MBRelease版本:1.97MB由于使用的QP-GCC,这个也是静态编译的GCC,默认使用静态C运行时库,可以生成独立的exe程序。和TDM-GCC差别不大。5、wxWidgets库编译安装(MinGW官方编译环境)和去DLL依赖与上面类似:官方MinGW目录在:C:OMinGWwx目录

16、在D:wxWidgets-2.8.12;(将D:wxWidgets-2.8.12buildmswgcc_mswud和D:wxWidgets-2.8.12buildmswgcc_mswu目录里清空,将D:wxWidgets-2.8.12libgcc_lib目录里清空)设置cmd编译环境setPATH=C:OMinGWbin;%PATH%设置wxWidgets-2.8.12的编译配置文件:D:wxWidgets-2.8.12buildmswconfig.gcc改为:SHARED?=0UNICODE?=1BUILD?=debugRUNTIME_LIBS?=dynamic编译生成wx静态库$cd/dD

17、:wxWidgets-2.8.12buildmsw$mingw32-make-fmakefile.gcc编译好debug版静态wx库后,再修改config.gcc为SHARED?=0UNICODE?=1BUILD?=releaseRUNTIME_LIBS?=dynamic然后编译:$mingw32-make-fmakefile.gcc等编译好后,debug和release静态库就都可以用了。测试,将CodeBlocks的GCC编译器路径设置到C:OMinGW就行了。Wx库路径仍是D:wxWidgets-2.8.12测试程序使用codeblocks自动生成的wxWidget对话框,编译连接wxH

18、ello对话框程序,Debug版本:27.9MBRelease版本:1.76MB这时需要依赖底层C运行时库的DLL:libgcc_s_dw2-1.dll(105KB)和libstdc+-6.dll(860KB)因为MinGW官方GCC默认使用底层动态链接库,所以需要额外的dll。进一步测试,将里的RUNTIME_LIBS?=dynamic换为RUNTIME_LIBS?=static,重新生成debug和release库,结果让人失望,用RUNTIME_LIBS?=static生成的wx库,使用wx库编程序,依然依赖libgcc_s_dw2-1.dll(105KB)和libstdc+-6.dll

19、(860KB)。所以RUNTIME_LIBS参数从目前来看对解除dll依赖没啥用。libgcc_s_dw2-1.dll(105KB)和libstdc+-6.dll(860KB)是否被依赖,由写应用程序,生成该应用程序的编译连接环境决定。QP-GCC全静态连接库,生成的就不依赖DLL。MinGW官方默认是用动态链接库,所以默认是依赖C运行时DLL的,当然可以用-static使用静态连接的底层C运行库。去除dll动态库依赖:用底层RUNTIME_LIBS?=dynamic动态链接C运行时库编译生成wx,使用wx编写应用程序时,在连接命令里附加参数:-static,如同二、1里面的helloworl

20、d程序连接参数一样。在CodeBlocks里,右击左边wxHello对话框项目,选择BuildOptions菜单,打开Projectbuildoptions对话框,选中左边Debug,再选右边Linkersettings,看到右边Otherlinkeroptions列表里,添加-static;选Release的设置,再选右边Linkersettings,看到右边Otherlinkeroptions列表里,添加-static。添加-static后,程序编译出来的就是不依赖其他DLL的。生成的wxHello.exeDebug大小:28MB,Release大小:1.86MB不依赖其他DLL。6、wx

21、Widgets库编译方式对比,和依赖库状况编译方式比较项SHARED值RUNTIME_LIBS值用wx生成应用程序exe依赖的动态dll库DLL依赖解除方法TDM-GCC(4.4.1)全动态编译wxCodeLite自带的1dynamicwxmsw28u_gcc_custom.dll和mingwm10.dll,上层图形库和底层运行时库都要。换全静态wxTDM-GCC(4.4.1)全静态编译wx0被无视,默认为static无不需要QP-GCC(4.4.5)全静态编译wx0被无视,默认为static无不需要MinGW官方GCC(4.5.2)静态编译wx0static被无视,同下面dynamiclib

22、gcc_s_dw2-1.dll和libstdc+-6.dll,仅底层C运行时库。使用连接参数:-staticMinGW官方GCC(4.5.2)半静态编译wx0dynamiclibgcc_s_dw2-1.dll和libstdc+-6.dll,仅底层C运行时库。使用连接参数:-staticSHARED值决定生成的上层wx图形库是动态链接或静态链接。决定需不需要连接wxmsw28u_gcc_custom.dll。RUNTIME_LIBS基本被无视,与编译环境的默认配置相关,编译器默认使用静态C运行库(QP-GCC),那么就不需要libgcc_s_dw2-1.dll、libstdc+-6.dll。像M

23、inGW官方默认使用动态C运行库,那么就需要这两个dll。可以使用-static连接参数解除对dll的依赖。三、老版本MinGW生成的程序对libgcc_s_dw2-1.dll、mingwm10.dll依赖问题的解决注意:上面的MinGW官方版本是GCC4.5.2,老些的版本生成程序默认需要libgcc_s_dw2-1.dll、mingwm10.dll,见附录介绍。1、解除libgcc_s_dw2-1.dll依赖,使用-static-libgcc选项连接。2、解除mingwm10.dll依赖,这由编译连接器发行版本决定,使用-static能解除对其他如libgcc_s_dw2-1.dll的依赖

24、,但是对mingwm10.dll无效。要解除mingwm10.dll依赖必须换编译器。方法一:推荐用QP-GCC(或PCX)的版本来开发程序,配合静态wx或qt库,生成的exe不需要dll。方法二:下载最新MinGW官方版,配合-static参数静态连接,解除dll依赖,也可以生成独立exe。附录:MinGWC运行时库原帖地址:MinGW的安装配置,作者:Breakermingwrt-ver-mingw32-dll.tar.gz1、包含mingwm10.dll这个动态链接库,当使用GCC的-mthreads选项(和线程安全异常处理有关)编译时,生成的程序依赖mingwm10.dll。-mthr

25、eads支持Mingw32的线程安全异常处理。对于依赖于线程安全异常处理的程序,必须启用这个选项。使用这个选项时会定义-D_MT,它将包含使用选项-lmingwthrd连接的一个特殊的线程辅助库,用于为每个线程清理异常处理数据。GCC4.4.0C+的RT库/标准库使用GNU的libstdc+-6的Windows移植版,C+标准库头文件的位置为:/lib/gcc/mingw32/4.4.0/include/c+2、使用GCC4.4.0默认选项编译C+代码,生成的程序会依赖libgcc_s_dw2-1.dll,参考GCC4.4.0ReleaseNotesandChangelog5.GENERALN

26、OTESDynamiclinkingwithlibgcc_s_dw2-1.dll:当在多个模块间,比如:DLL之间或DLL与EXE之间,抛出异常时,如果采用动态链接编译方式,则必需链接到libgcc_s_dw2-1.dll。因此,这是所有除C程序外的程序默认链接方式。如果要禁止动态链接,可以使用-static-libgcc选项,如果要使用C程序的动态链接方式,可以使用-shared-libgcc选项。参考网址维基百科:http:/zh.wikipedia.org/zh/MinGW百度百科:FreeUPX:MinGW:http:/www.mingw.org/TDM-GCC:http:/tdm-M

27、inGWDistro-:QPGCC:PCXPRJMinGW:wxWidgets:http:/www.wxwidgets.org/CodeLite:http:/www.codelite.org/Code:Blocks:http:/www.codeblocks.org/CSDN:MinGW的安装配置:跨平台的C+GUI库wxWidgets编译:wxWidgets2.9.2svn(3.x)最小体积编译方法:wxWidgets编译简介:wxWidgets官方论坛:http:/forums.wxwidgets.org/或者有中文版块,wxWidgetsDevelopment(Chinese)Qt:QtCentre:http:/www.qtcentre.org/forum.phpQtCentre-Removingdependenciesformingwm10.dllandlibgcc_s_dw2-1.dll,staticlinking?:http:/www.qtcentre.org/threads/29489-Removing-dependencies-for-mingwm10.dll-and-libgcc_s_dw2-1.dll-static-linkingQt中文论坛:http:/www.qtcn.org/bbs/-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁