a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

Mingw64編譯wxWidgets 3.0.2常見錯誤分析

2020-01-26 14:22:47
字體:
來源:轉載
供稿:網友

使用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,然后按照如下步驟編譯(假設要編譯一個Unicode共享庫版的wxWidgets):

cd X:/wxWidgets-3.0.2/build/msw

    make -f makefile.gcc SHARED=1 UNICODE=1

  然而編譯到一半,從C代碼變為C++代碼時,就會產生如下錯誤(有許多類似錯誤,只選取一處):

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

  這次編譯完了所有中間件,但是到鏈接時候又出了問題:

    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)':
......

  這實在是令我百思不得其解了,翻遍了docs文件夾的每個角落,終于在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"進行編譯,這會導致一些wxWidgets依賴的extensions(擴展名?)被屏蔽的問題。然后用以下命令重新編譯,就成功了。

    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

后記

  上面說到關于extensions,這里的意思應該是擴展,即gnu的g++(gcc)提供給c/c++代碼除c++標準以外的支持。如果這些支持沒有被啟用,自然會導致上面像wxWidgets的庫編譯失敗,不過這么依賴語言外的額外實現也不見得是件好事吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 99精品欧美一区二区三区 | 国产乱人伦av在线a 日韩电影中文字幕 | 污视频网址在线观看 | 日韩中文字幕免费在线播放 | 一区二区日韩精品 | 涩综合 | 欧美在线一二三 | 欧美一区在线视频 | 日韩伦理一区二区 | 久久国产精品视频观看 | 色视频免费在线观看 | 精品三级在线 | 欧美一区二区三区在线视频观看 | 国产高清在线精品一区二区三区 | 色婷婷综合久久久久中文一区二区 | 精品成人久久 | 九热精品 | 精品综合久久久 | 久久精品欧美一区二区三区麻豆 | 国产精品欧美久久久久一区二区 | 欧美综合一区二区 | 国产精品国产精品国产专区不片 | 亚洲一区久久 | 国产视频久久久久 | 国产一区二区自拍 | 成人视屏在线观看 | 亚洲成av | 久久这里有精品 | v片网站| 日韩成人在线一区 | 精品国产乱码久久久久久88av | 久久久久久久久久久久久久久久久久久 | 久久99精品久久久水蜜桃 | 日本性视频 | 久久免费国产视频 | 四虎av| 日本在线不卡视频 | 美日韩精品视频 | 中文字幕网在线 | 天天操天天插 | 韩国三级中文字幕hd爱的色放 |