Mingw64编译wxWidgets 3.0.2常见错误分析
使用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的库编译失败,不过这么依赖语言外的额外实现也不见得是件好事吧。
您可能感兴趣的文章:
- Android开发5:应用程序窗口小部件App Widgets的实现(附demo)
- yii2.0实现创建简单widgets示例
- 在Visual Studio上构建C++的GUI框架wxWidgets的开发环境
- 使用Asp.net Mvc3 Razor视图方式扩展JQuery UI Widgets方法介绍
- 漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
- 漂亮的widgets,支持换肤和后期开发新皮肤
- Android实现桌面悬浮窗、蒙板效果实例代码
- android 添加随意拖动的桌面悬浮窗口
- android PopupWindow 和 Activity弹出窗口实现方式
- Android小挂件(APP Widgets)设计指导
- Mingw64编译wxWidgets3.0.2常见错误
- Mingw64编译wxWidgets 3.0.2常见错误分析
- Linux下的wxWidgets静态编译实现方法
- tesseract3.0.2在mac 10.10上的编译 xcode6
- VS2010编译及创建wxWidgets 2.9.5工程
- redis3.0.2 编译安装 (启动服务方式启动)
- VC6 编译并且使用wxWidgets - 我们用命令行方式build - 入门篇 一
- 在winxp下用mingw编译安装wxwidgets
- linux下编译及安装wxWidgets
- 在Android上编译OSG[3.0.2 ] (转)
- 如何编译wxWidgets示例程序(samples目录下的程序)
- tesseract-ocr 3.0.2 iPhone编译 xcode6 sdk8
- wxWidgets在wince上的编译方法
- VC++6.0下搭建wxWidgets编译环境
- 如何编译wxWidgets示例程序(samples目录下的程序)
- 在Code:Blocks使用MinGW编译wxWidgets库
- wxWidgets的下载、安装和编译
- vsftpd-3.0.2 x86_64 编译安装
- DialogBlocks创建及编译wxWidgets项目
- wxWidgets在wince上的编译方法