在Mingw 64下使用wxWidgets 3.0.2库出现问题

5
这是我编译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*)'

我在这里做错了什么?您是否看到构建库的方法存在问题?


我正在使用Mingw 64 Drangon(http://www.drangon.org/mingw/)。 - user1
查看此帖子 https://groups.google.com/forum/#!topic/wx-users/YQA0FKuyeU4 可能会有所帮助。 - demented hedgehog
我使用以下命令重新编译了wxWidgets库:mingw32-make -f makefile.gcc CFG=64 CXXFLAGS="-std=c++11 -DwxUSE_UNICODE_MSLU=0" BUILD=debug UNICODE=1 MONOLITHIC=1但这并没有起到帮助的作用。 - user1
1个回答

9

最后,我找到了如何使用MingW Drangon 64位构建WxWidgets的方法。

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

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

C ++ 11注意事项:如果要以C ++ 11模式编译wxWidgets,则必须使用-std = gnu ++ 11开关,因为-std = c ++ 11会禁用wxWidgets依赖的一些扩展。 请使用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

2
也许有人应该提交一个错误报告;CXXFLAGS的默认值为空,这也会导致构建错误,因为依赖于c++11特性。我认为在config.gcc中包含CXXFLAGS ?= -std=gnu++11没有任何问题。 - M.M
3
当然,更好的做法是修复对非标准特性的依赖 :) - M.M
1
谢谢,这也解决了我的Mingw Qmake (Qt) C++11问题 - edin-m
@M.M 看起来已经修复了。我能够成功构建 wxWidgets 3.1.0 版本,甚至使用 -std=c++11-std=c++14 - Marc.2377
1
@Marc.2377 很棒,我可能会再看一下它。 - M.M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接