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的库编译失败,不过这么依赖语言外的额外实现也不见得是件好事吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mingw64是一个用于Windows操作系统的延伸开发环境,而GDAL(地理空间数据抽象库)是一个开源的地理信息系统(GIS)软件库。通过Mingw64编译好的GDAL库意味着将GDAL的源代码使用Mingw64环境编译生成的库文件。Mingw64编译可以将GDAL库进行优化,以适应Windows操作系统下的特定需求。 Mingw64编译好的GDAL库具有以下特点: 1. 易于使用:Mingw64是与Windows平台兼容的工具,因此使用Mingw64编译的GDAL库可以更方便地集成到Windows开发环境中,并且可以通过简单的函数调用来使用GDAL功能。 2. 高可移植性:使用Mingw64编译的GDAL库可以在不同的Windows操作系统版本中运行,不会受限于特定的Windows开发工具或环境。 3. 提供更好的性能:Mingw64编译器可以使用最新的优化技术来生成高性能的代码,因此使用Mingw64编译的GDAL库可以在Windows平台上提供更高的性能和更好的效果。 4. 兼容性强:Mingw64是基于MinGW(Minimalist GNU for Windows)和MSYS(Minimal System)的改进版本,因此可以与其他基于MinGW的库和工具进行良好的兼容。 总之,Mingw64编译好的GDAL库是具有高性能、兼容性强、易于使用和高可移植性的库文件,可以在Windows操作系统上进行地理空间数据处理和分析。通过使用这个编译好的库,开发人员可以更方便地开发GIS应用程序,并且能够针对不同的Windows平台进行优化和适配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值