MinGW版本-wxWidgets庫(kù)編譯安裝和生成程序DLL依賴(lài)問(wèn)題解決電子教案_第1頁(yè)
MinGW版本-wxWidgets庫(kù)編譯安裝和生成程序DLL依賴(lài)問(wèn)題解決電子教案_第2頁(yè)
MinGW版本-wxWidgets庫(kù)編譯安裝和生成程序DLL依賴(lài)問(wèn)題解決電子教案_第3頁(yè)
MinGW版本-wxWidgets庫(kù)編譯安裝和生成程序DLL依賴(lài)問(wèn)題解決電子教案_第4頁(yè)
MinGW版本-wxWidgets庫(kù)編譯安裝和生成程序DLL依賴(lài)問(wèn)題解決電子教案_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Good is good, but better carries it.精益求精,善益求善。MinGW版本-wxWidgets庫(kù)編譯安裝和生成程序DLL依賴(lài)問(wèn)題解決-MinGW-GCC版本、wxWidgets庫(kù)編譯安裝和生成程序的mingwm10.dll、libgcc_s_dw2-1.dll依賴(lài)問(wèn)題解決本文編寫(xiě)和程序配置調(diào)試:HYPERLINKmailto:蔚藍(lán)(蔚藍(lán)()HYPERLINK/winland0704/home/winland0704/home一、MinGW發(fā)行版維基百科:MinGW(MinimalistGNUforWindows),又稱(chēng)Mingw32,是將HYPERLINK/wi

2、ki/GNUGNU開(kāi)發(fā)工具移植到Win32平臺(tái)下的產(chǎn)物,包括一系列頭文件(HYPERLINK/wiki/Windows_APIWin32API)、庫(kù)和可執(zhí)行文件。MinGW是從HYPERLINK/wiki/CygwinCygwin(1.3.3版)基礎(chǔ)上發(fā)展而來(lái),但是用MinGW使用Windows中的C運(yùn)行庫(kù)。因此用MinGW開(kāi)發(fā)的程序不需要額外的第三方DLL支持就可以直接在Windows下運(yùn)行,而且也不一定必須遵從HYPERLINK/wiki/GPLGPL許可證。這同時(shí)造成了MinGW開(kāi)發(fā)的程序只能使用Win32API和跨平臺(tái)的第三方庫(kù),而缺少POSIX支持HYPERLINKlcite_not

3、e-01,大多數(shù)GNU軟件無(wú)法在不修改源代碼的情況下用MinGW編譯。官網(wǎng):HYPERLINK/現(xiàn)在已經(jīng)有HYPERLINK/projects/mingw-w64/MinGW-w64-for32and64bitWindows項(xiàng)目,可以為為64位Windows提供開(kāi)發(fā)環(huán)境。64位版本仍在開(kāi)發(fā)中,有測(cè)試版本放出。HYPERLINK/projects/mingw-w64/projects/mingw-w64/除了官方編譯的MinGW-GCC版本,還有其他人員自己重新編譯打包的發(fā)行版,本文中介紹其中的幾個(gè)。1、MinGW官方版本網(wǎng)址:HYPERLINK/projects/mingw/projects/

4、mingw/bin包含動(dòng)態(tài)庫(kù):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,c+,ada,fortran,objc,obj-c+-disable-sjl

5、j-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帶的)網(wǎng)址:HYPERLINK/bin包含動(dòng)態(tài)庫(kù):libgcc_s_sjlj-1.dll234KBmingwm

6、10.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-data-sections-disable-werror-enable-thread

7、s-disable-symvers-enable-version-specific-runtime-libs-enable-fully-dynamic-string-with-pkgversion=TDM-2mingw32-enable-sjlj-exceptions-with-bugurl=/recentgcc/bugs.phpThreadmodel:win32gccversion4.4.1(TDM-2mingw32)3、MinGWD最新版本網(wǎng)址:HYPERLINK/mingw.html/mingw.html/bin包含動(dòng)態(tài)庫(kù):mingwm10.dll27KBGCC配置信息:Target:i

8、686-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

9、版本網(wǎng)址:HYPERLINK/p/qp-gcc/p/qp-gcc/這個(gè)和后面的PCX版本都是國(guó)人弄的,鏈接庫(kù)全是靜態(tài)編譯的版本,很好使,編譯出來(lái)的程序只需要一個(gè)exe就可以了。QP版的是CSDN上的HYPERLINK/LoadenLoaden(老鄧)大俠弄得:HYPERLINK/u/20100302/17/3a465a36-defa-46a3-a913-267c86673579.html/u/20100302/17/3a465a36-defa-46a3-a913-267c86673579.html/bin包含動(dòng)態(tài)庫(kù):mingwm10.dll24KBGCC配置信息:Usingbuilt-insp

10、ecs.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+-enable-static-enable-cxx-flags=-fno-function-sections-fno-data-sections-enable-fully-dynamic-string-enable-version-specific-runtime-libs

11、-enable-threads=win32-enable-libgomp-enable-libiconv-disable-shared-disable-nls-disable-werror-disable-libstdcxx-pch-disable-win32-registry-disable-sjlj-exceptions-with-dwarf2-with-gmp=/home/loaden/AUR/mingw32/depends-with-mpfr=/home/loaden/AUR/mingw32/depends-with-pkgversion=QPMinGW32-with-bugurl=T

12、hreadmodel:win32gccversion4.4.5(QPMinGW32)5、PCX版本,包括32bit和64bit版本的MinGW網(wǎng)址:HYPERLINK/p/pcxprj/p/pcxprj/,編譯打包:HYPERLINK/u/xunxun1982/xunxun1982HYPERLINK/p/pcxprj/downloads/detail?name=MinGW_gcc0110317_static_win64.7zMinGW_gcc0110317_static_win64.7zHYPERLINK/p/pcxprj/downloads/detail?name=MinGW_gcc0110

13、324_static_win32.7zMinGW_gcc0110324_static_win32.7z項(xiàng)目主頁(yè)還有Code:Blocks靜態(tài)編譯的打包,以及Code:Blocks+靜態(tài)MinGW的合集包。未測(cè)試,應(yīng)該和QPGCC版本差不多。這個(gè)版本已經(jīng)更新到GCC4.6的測(cè)試版本了。二、MinGW生成程序的(mingwm10.dll,libgcc_s_dw2-1.dll)DLL依賴(lài)問(wèn)題及解決1、各版本MinGW生成helloworld程序測(cè)試代碼main.cpp:#include#include#includeusingnamespacestd;intmain(intargc,char*arg

14、v)printf(HelloWorld!n);coutEnvironmentVariables:EnvironmentVariables對(duì)話(huà)框中,把WXWIN路徑改成新的:D:wxWidgets-2.8.12并把PATH和WXCFG里的gcc_dll改成gcc_lib。第二處:Settings菜單-TagsSettings:在TagsOptions對(duì)話(huà)框里,選中左邊IncludeFiles,把老版的wxinclude目錄刪掉,上面列表加上新的:D:wxWidgets-2.8.12include下面列表加上新的:D:wxWidgets-2.8.12includewxunivD:wxWidgets

15、-2.8.12includewxunix然后重啟CodeLite。wxHello對(duì)話(huà)框(就一個(gè)框,一個(gè)OK按鈕,一個(gè)Cancel按鈕),編譯生成后:Debug版本:28MBRelease版本:1.94MB這個(gè)debug版夠大的,wxWidgets大概就這樣吧。這里生成的exe都是獨(dú)立運(yùn)行的,不需要mingwm10.dll,不需要libgcc_s_dw2-1.dll或libgcc_s_sjlj-1.dll。也不需要wxWidgets的dll動(dòng)態(tài)庫(kù)。4、wxWidgets庫(kù)編譯安裝(QP-GCC編譯環(huán)境)和去DLL依賴(lài)與上面類(lèi)似:QP-MinGW目錄在:D:MinGWwx目錄在D:wxWidget

16、s-2.8.12設(shè)置cmd編譯環(huán)境setPATH=D:MinGWbin;%PATH%設(shè)置wxWidgets-2.8.12的編譯配置文件:D:wxWidgets-2.8.12buildmswconfig.gcc改為:SHARED?=0UNICODE?=1BUILD?=debugRUNTIME_LIBS?=dynamic編譯生成wx靜態(tài)庫(kù)$cd/dD:wxWidgets-2.8.12buildmsw$make-fmakefile.gcc編譯好debug版靜態(tài)wx庫(kù)后,再修改config.gcc為SHARED?=0UNICODE?=1BUILD?=releaseRUNTIME_LIBS?=dynam

17、ic然后編譯:$make-fmakefile.gcc等編譯好后,debug和release靜態(tài)庫(kù)就都可以用了。測(cè)試,CodeLite不好弄,因?yàn)橐獡QMinGW,搞掛了。所以換了CodeBlocks最簡(jiǎn)版的,不帶MinGW。然后自己設(shè)置MinGW路徑,還有wx路徑,還不錯(cuò),設(shè)置好路徑就可以跑程序。程序使用codeblocks自動(dòng)生成的wxWidget對(duì)話(huà)框,跑的不錯(cuò)。都可以獨(dú)立運(yùn)行,不需要其他DLL。Debug版本:28.7MBRelease版本:1.97MB由于使用的QP-GCC,這個(gè)也是靜態(tài)編譯的GCC,默認(rèn)使用靜態(tài)C運(yùn)行時(shí)庫(kù),可以生成獨(dú)立的exe程序。和TDM-GCC差別不大。5、wxWi

18、dgets庫(kù)編譯安裝(MinGW官方編譯環(huán)境)和去DLL依賴(lài)與上面類(lèi)似:官方MinGW目錄在:C:OMinGWwx目錄在D:wxWidgets-2.8.12;(將D:wxWidgets-2.8.12buildmswgcc_mswud和D:wxWidgets-2.8.12buildmswgcc_mswu目錄里清空,將D:wxWidgets-2.8.12libgcc_lib目錄里清空)設(shè)置cmd編譯環(huán)境setPATH=C:OMinGWbin;%PATH%設(shè)置wxWidgets-2.8.12的編譯配置文件:D:wxWidgets-2.8.12buildmswconfig.gcc改為:SHARED?=

19、0UNICODE?=1BUILD?=debugRUNTIME_LIBS?=dynamic編譯生成wx靜態(tài)庫(kù)$cd/dD:wxWidgets-2.8.12buildmsw$mingw32-make-fmakefile.gcc編譯好debug版靜態(tài)wx庫(kù)后,再修改config.gcc為SHARED?=0UNICODE?=1BUILD?=releaseRUNTIME_LIBS?=dynamic然后編譯:$mingw32-make-fmakefile.gcc等編譯好后,debug和release靜態(tài)庫(kù)就都可以用了。測(cè)試,將CodeBlocks的GCC編譯器路徑設(shè)置到C:OMinGW就行了。Wx庫(kù)路徑仍

20、是D:wxWidgets-2.8.12測(cè)試程序使用codeblocks自動(dòng)生成的wxWidget對(duì)話(huà)框,編譯連接wxHello對(duì)話(huà)框程序,Debug版本:27.9MBRelease版本:1.76MB這時(shí)需要依賴(lài)底層C運(yùn)行時(shí)庫(kù)的DLL:libgcc_s_dw2-1.dll(105KB)和libstdc+-6.dll(860KB)因?yàn)镸inGW官方GCC默認(rèn)使用底層動(dòng)態(tài)鏈接庫(kù),所以需要額外的dll。進(jìn)一步測(cè)試,將里的RUNTIME_LIBS?=dynamic換為RUNTIME_LIBS?=static,重新生成debug和release庫(kù),結(jié)果讓人失望,用RUNTIME_LIBS?=static生

21、成的wx庫(kù),使用wx庫(kù)編程序,依然依賴(lài)libgcc_s_dw2-1.dll(105KB)和libstdc+-6.dll(860KB)。所以RUNTIME_LIBS參數(shù)從目前來(lái)看對(duì)解除dll依賴(lài)沒(méi)啥用。libgcc_s_dw2-1.dll(105KB)和libstdc+-6.dll(860KB)是否被依賴(lài),由寫(xiě)應(yīng)用程序,生成該應(yīng)用程序的編譯連接環(huán)境決定。QP-GCC全靜態(tài)連接庫(kù),生成的就不依賴(lài)DLL。MinGW官方默認(rèn)是用動(dòng)態(tài)鏈接庫(kù),所以默認(rèn)是依賴(lài)C運(yùn)行時(shí)DLL的,當(dāng)然可以用-static使用靜態(tài)連接的底層C運(yùn)行庫(kù)。去除dll動(dòng)態(tài)庫(kù)依賴(lài):用底層RUNTIME_LIBS?=dynamic動(dòng)態(tài)鏈接C

22、運(yùn)行時(shí)庫(kù)編譯生成wx,使用wx編寫(xiě)應(yīng)用程序時(shí),在連接命令里附加參數(shù):-static,如同二、1里面的helloworld程序連接參數(shù)一樣。在CodeBlocks里,右擊左邊wxHello對(duì)話(huà)框項(xiàng)目,選擇BuildOptions菜單,打開(kāi)Projectbuildoptions對(duì)話(huà)框,選中左邊Debug,再選右邊Linkersettings,看到右邊Otherlinkeroptions列表里,添加-static;選Release的設(shè)置,再選右邊Linkersettings,看到右邊Otherlinkeroptions列表里,添加-static。添加-static后,程序編譯出來(lái)的就是不依賴(lài)其他DL

23、L的。生成的wxHello.exeDebug大小:28MB,Release大?。?.86MB不依賴(lài)其他DLL。6、wxWidgets庫(kù)編譯方式對(duì)比,和依賴(lài)庫(kù)狀況編譯方式比較項(xiàng)SHARED值RUNTIME_LIBS值用wx生成應(yīng)用程序exe依賴(lài)的動(dòng)態(tài)dll庫(kù)DLL依賴(lài)解除方法TDM-GCC(4.4.1)全動(dòng)態(tài)編譯wxCodeLite自帶的1dynamicwxmsw28u_gcc_custom.dll和mingwm10.dll,上層圖形庫(kù)和底層運(yùn)行時(shí)庫(kù)都要。換全靜態(tài)wxTDM-GCC(4.4.1)全靜態(tài)編譯wx0被無(wú)視,默認(rèn)為static無(wú)不需要QP-GCC(4.4.5)全靜態(tài)編譯wx0被無(wú)視,默

24、認(rèn)為static無(wú)不需要MinGW官方GCC(4.5.2)靜態(tài)編譯wx0static被無(wú)視,同下面dynamiclibgcc_s_dw2-1.dll和libstdc+-6.dll,僅底層C運(yùn)行時(shí)庫(kù)。使用連接參數(shù):-staticMinGW官方GCC(4.5.2)半靜態(tài)編譯wx0dynamiclibgcc_s_dw2-1.dll和libstdc+-6.dll,僅底層C運(yùn)行時(shí)庫(kù)。使用連接參數(shù):-staticSHARED值決定生成的上層wx圖形庫(kù)是動(dòng)態(tài)鏈接或靜態(tài)鏈接。決定需不需要連接wxmsw28u_gcc_custom.dll。RUNTIME_LIBS基本被無(wú)視,與編譯環(huán)境的默認(rèn)配置相關(guān),編譯器默認(rèn)

25、使用靜態(tài)C運(yùn)行庫(kù)(QP-GCC),那么就不需要libgcc_s_dw2-1.dll、libstdc+-6.dll。像MinGW官方默認(rèn)使用動(dòng)態(tài)C運(yùn)行庫(kù),那么就需要這兩個(gè)dll??梢允褂?static連接參數(shù)解除對(duì)dll的依賴(lài)。三、老版本MinGW生成的程序?qū)ibgcc_s_dw2-1.dll、mingwm10.dll依賴(lài)問(wèn)題的解決注意:上面的MinGW官方版本是GCC4.5.2,老些的版本生成程序默認(rèn)需要libgcc_s_dw2-1.dll、mingwm10.dll,見(jiàn)附錄介紹。1、解除libgcc_s_dw2-1.dll依賴(lài),使用-static-libgcc選項(xiàng)連接。2、解除mingwm1

26、0.dll依賴(lài),這由編譯連接器發(fā)行版本決定,使用-static能解除對(duì)其他如libgcc_s_dw2-1.dll的依賴(lài),但是對(duì)mingwm10.dll無(wú)效。要解除mingwm10.dll依賴(lài)必須換編譯器。方法一:推薦用QP-GCC(或PCX)的版本來(lái)開(kāi)發(fā)程序,配合靜態(tài)wx或qt庫(kù),生成的exe不需要dll。方法二:下載最新MinGW官方版,配合-static參數(shù)靜態(tài)連接,解除dll依賴(lài),也可以生成獨(dú)立exe。附錄:MinGWC運(yùn)行時(shí)庫(kù)原帖地址:MinGW的安裝配置,作者:BreakerHYPERLINK/wp/post/mingw-install-config-note/wp/post/min

27、gw-install-config-note/mingwrt-ver-mingw32-dll.tar.gz1、包含mingwm10.dll這個(gè)動(dòng)態(tài)鏈接庫(kù),當(dāng)使用GCC的-mthreads選項(xiàng)(和線(xiàn)程安全異常處理有關(guān))編譯時(shí),生成的程序依賴(lài)mingwm10.dll。-mthreads支持Mingw32的線(xiàn)程安全異常處理。對(duì)于依賴(lài)于線(xiàn)程安全異常處理的程序,必須啟用這個(gè)選項(xiàng)。使用這個(gè)選項(xiàng)時(shí)會(huì)定義-D_MT,它將包含使用選項(xiàng)-lmingwthrd連接的一個(gè)特殊的線(xiàn)程輔助庫(kù),用于為每個(gè)線(xiàn)程清理異常處理數(shù)據(jù)。GCC4.4.0C+的RT庫(kù)/標(biāo)準(zhǔn)庫(kù)使用GNU的HYPERLINK/libstdc+/t_blan

28、klibstdc+-6的Windows移植版,C+標(biāo)準(zhǔn)庫(kù)頭文件的位置為:/lib/gcc/mingw32/4.4.0/include/c+2、使用GCC4.4.0默認(rèn)選項(xiàng)編譯C+代碼,生成的程序會(huì)依賴(lài)libgcc_s_dw2-1.dll,參考HYPERLINK/project/shownotes.php?release_id=691876t_blankGCC4.4.0ReleaseNotesandChangelog5.GENERALNOTESDynamiclinkingwithlibgcc_s_dw2-1.dll:當(dāng)在多個(gè)模塊間,比如:DLL之間或DLL與EXE之間,拋出異常時(shí),如果采用動(dòng)態(tài)鏈

29、接編譯方式,則必需鏈接到libgcc_s_dw2-1.dll。因此,這是所有除C程序外的程序默認(rèn)鏈接方式。如果要禁止動(dòng)態(tài)鏈接,可以使用-static-libgcc選項(xiàng),如果要使用C程序的動(dòng)態(tài)鏈接方式,可以使用-shared-libgcc選項(xiàng)。參考網(wǎng)址維基百科:HYPERLINK/zh/MinGW/zh/MinGW百度百科:HYPERLINK/view/975244.htm/view/975244.htmFreeUPX:HYPERLINK/xunlei/xunlei_22409.html/xunlei/xunlei_22409.htmlMinGW:HYPERLINK/TDM-GCC:HYPERLINK/MinGWD:HYPERLINK/mingw.html/mingw.htmlQPGCC:HYPERLINK/p/qp-gcc/p/qp-gcc/PCXPRJMinGW:HYPERLINK/p/pcxprj/downloads/list/p/pcxprj/downloads

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論