【问题标题】:Trouble using wxWidgets 3.0.2 library under Mingw 64在 Mingw 64 下使用 wxWidgets 3.0.2 库出现问题
【发布时间】:2015-02-01 20:11:48
【问题描述】:

这是我编译 wxWidgets 库的方法。

下载https://sourceforge.net/projects/wxwindows/files/3.0.2/wxMSW-Setup-3.0.2.exe

set path=%MINGW%\bin
cd D:\wxWidgets-3.0.2\build\msw

mingw32-make -f makefile.gcc CFG=64 CXXFLAGS=-std=c++11 BUILD=debug UNICODE=1 MONOLITHIC=1
mingw32-make -f makefile.gcc CFG=64 CXXFLAGS=-std=c++11 BUILD=release UNICODE=1 MONOLITHIC=1

无法将我的测试程序与构建的新库链接。

D:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_filename.o): In function `wxChmod(wxString const&, unsigned short)':
D:\wxWidgets-3.0.2\build\msw/../../include/wx/filefn.h:513: undefined reference to `wxMSLU__wchmod(wchar_t const*, int)'
D:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_filename.o): In function `wxOpen(wxString const&, int, unsigned short)':
D:\wxWidgets-3.0.2\build\msw/../../include/wx/filefn.h:515: undefined reference to `wxMSLU__wopen(wchar_t const*, int, int)'
D:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_file.o): In function `wxRemove(wxString const&)':
D:\wxWidgets-3.0.2\build\msw/../../include/wx/wxcrt.h:758: undefined reference to `wxMSLU__wremove(wchar_t const*)'
D:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_file.o): In function `wxAccess(wxString const&, unsigned short)':
D:\wxWidgets-3.0.2\build\msw/../../include/wx/filefn.h:511: undefined reference to `wxMSLU__waccess(wchar_t const*, int)'
D:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_filefn.o): In function `wxRename(wxString const&, wxString const&)':
D:\wxWidgets-3.0.2\build\msw/../../include/wx/wxcrt.h:760: undefined reference to `wxMSLU__wrename(wchar_t const*, wchar_t const*)'
D:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_filefn.o): In function `wxRmDir(wxString const&)':
D:\wxWidgets-3.0.2\build\msw/../../include/wx/filefn.h:524: undefined reference to `wxMSLU__wrmdir(wchar_t const*)'
D:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_filefn.o): In function `wxMkDir(wxString const&, unsigned short)':
D:\wxWidgets-3.0.2\build\msw/../../include/wx/filefn.h:528: undefined reference to `wxMSLU__wmkdir(wchar_t const*)'
D:\wxWidgets-3.0.2\lib\gcc_lib64/libwxmsw30ud.a(monolib_ffile.o): In function `wxFopen(wxString const&, wxString const&)':
D:\wxWidgets-3.0.2\build\msw/../../include/wx/wxcrt.h:754: undefined reference to `wxMSLU__wfopen(wchar_t const*, wchar_t const*)'

我在这里做错了什么。您是否发现库的构建方式有任何问题。

【问题讨论】:

标签: c++ compilation wxwidgets mingw-w64


【解决方案1】:

最后,我想出了如何使用 MingW Drangon 64 位构建 WxWidgets。

您不应将CXX 标志设置为-std=c++11

这是我在 WxWidgets 文件夹中找到的注释。这就是我的问题!

C++11 注意:如果你想在 C++11 模式下编译 wxWidgets,你 目前有 使用 -std=gnu++11 开关作为 -std=c++11 禁用一些扩展 wxWidgets 所依赖的。 IE。请使用 CXXFLAGS="-std=gnu++11"。

下载https://sourceforge.net/projects/wxwindows/files/3.0.2/wxMSW-Setup-3.0.2.exe

set path=C:\mingw64\bin
cd C:\wxWidgets-3.0.2\build\msw

mingw32-make -f makefile.gcc CXXFLAGS="-std=gnu++11" BUILD=debug UNICODE=1 SHARED=1
mingw32-make -f makefile.gcc CXXFLAGS="-std=gnu++11" BUILD=release UNICODE=1 SHARED=1
mingw32-make -f makefile.gcc CXXFLAGS="-std=gnu++11" BUILD=debug UNICODE=1 SHARED=0
mingw32-make -f makefile.gcc CXXFLAGS="-std=gnu++11" BUILD=release UNICODE=1 SHARED=0

【讨论】:

  • 也许有人应该提交错误报告; CXXFLAGS 的默认值为空,这也会导致构建错误,因为依赖于 c++11 功能。我认为 config.gcc 包含 CXXFLAGS ?= -std=gnu++11 没有任何问题
  • 更好的当然是修复对非标准功能的依赖:)
  • 谢谢;这也解决了my mingw qmake (Qt) c++11 issue
  • @M.M 这似乎已经修复。我能够使用-std=c++11 甚至-std=c++14 成功构建wxWidgets 3.1.0 版。
  • @Marc.2377 太棒了,我可能会再看看它
猜你喜欢
  • 2016-02-24
  • 2021-03-21
  • 2015-07-18
  • 2010-12-11
  • 2011-05-02
  • 1970-01-01
  • 2012-01-30
  • 2011-05-27
  • 2013-10-28
相关资源
最近更新 更多