Mingw64編譯wxWidgets 3.0.2常見錯(cuò)誤分析
使用Mingw64編譯wxWidgets3.0.2,首先得下載wxMSW-Setup-3.0.2.exe(https://sourceforge.net/projects/wxwindows/files/3.0.2/wxMSW-Setup-3.0.2.exe,然后按照如下步驟編譯(假設(shè)要編譯一個(gè)Unicode共享庫版的wxWidgets):
cd X:\wxWidgets-3.0.2\build\msw
make -f makefile.gcc SHARED=1 UNICODE=1
然而編譯到一半,從C代碼變?yōu)镃++代碼時(shí),就會(huì)產(chǎn)生如下錯(cuò)誤(有許多類似錯(cuò)誤,只選取一處):
In file included from e:\mingwd\mingw\include\c++\5.2.0\type_traits:35:0,
from ..\..\include/wx/strvararg.h:25,
from ..\..\include/wx/string.h:46,
from ..\..\include/wx/any.h:19,
from ../../src/common/any.cpp:18:
e:\mingwd\mingw\include\c++\5.2.0\bits\c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
既然只是c++11支持沒有打開的問題,只要改一下CXXFLAGS即可,于是乎,按如下命令重新編譯。
make -f makefile.gcc CXXFLAGS="-std=c++11" SHARED=1 UNICODE=1 clean
make -f makefile.gcc CXXFLAGS="-std=c++11" SHARED=1 UNICODE=1
這次編譯完了所有中間件,但是到鏈接時(shí)候又出了問題:
E:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_filename.o): In function `wxChmod(wxString const&, unsigned short)':
E:\wxWidgets-3.0.2\build\msw/../../include/wx/filefn.h:513: undefined reference to `wxMSLU__wchmod(wchar_t const*, int)'
E:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_filename.o): In function `wxOpen(wxString const&, int, unsigned short)':
E:\wxWidgets-3.0.2\build\msw/../../include/wx/filefn.h:515: undefined reference to `wxMSLU__wopen(wchar_t const*, int, int)'
E:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_file.o): In function `wxRemove(wxString const&)':
E:\wxWidgets-3.0.2\build\msw/../../include/wx/wxcrt.h:758: undefined reference to `wxMSLU__wremove(wchar_t const*)'
E:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_file.o): In function `wxAccess(wxString const&, unsigned short)':
......
這實(shí)在是令我百思不得其解了,翻遍了docs文件夾的每個(gè)角落,終于在install.txt中找到了答案,里面有這么一句話:
C++11 note: If you want to compile wxWidgets in C++11 mode, you currently have
to use -std=gnu++11 switch as -std=c++11 disables some extensions
that wxWidgets relies on. I.e. please use CXXFLAGS="-std=gnu++11".
說的很清楚,不能用”std=c++11"進(jìn)行編譯,這會(huì)導(dǎo)致一些wxWidgets依賴的extensions(擴(kuò)展名?)被屏蔽的問題。然后用以下命令重新編譯,就成功了。
make -f makefile.gcc CXXFLAGS="-std=gnu++11" SHARED=1 UNICODE=1 clean
make -f makefile.gcc CXXFLAGS="-std=gnu++11" SHARED=1 UNICODE=1
后記
上面說到關(guān)于extensions,這里的意思應(yīng)該是擴(kuò)展,即gnu的g++(gcc)提供給c/c++代碼除c++標(biāo)準(zhǔn)以外的支持。如果這些支持沒有被啟用,自然會(huì)導(dǎo)致上面像wxWidgets的庫編譯失敗,不過這么依賴語言外的額外實(shí)現(xiàn)也不見得是件好事吧。
欄 目:C語言
本文標(biāo)題:Mingw64編譯wxWidgets 3.0.2常見錯(cuò)誤分析
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1968.html
您可能感興趣的文章
- 01-10解析四則表達(dá)式的編譯過程及生成匯編代碼
- 01-10淺析C語言中的sizeof
- 01-10如何將C語言代碼轉(zhuǎn)換為應(yīng)用程序(也就是編譯)
- 01-10VC6.0常見編譯錯(cuò)誤提示附解決方法
- 01-10編譯錯(cuò)誤error: stray ‘\343’in program的解決方法
- 01-10文件編譯時(shí)出現(xiàn)multiple definition of 'xxxxxx'的具體解決方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10linux使用gcc編譯c語言共享庫步驟
- 01-10GCC 編譯c程序的方法及過程解析
- 01-10mingw編譯的windows命令行貪吃蛇示例


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什