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

Trouble using wxWidgets 3.0.2 library under Mingw 64

本文关键字:问题 Mingw wxWidgets      更新时间:2023-10-16

这是我编译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.2buildmsw
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.2libgcc_lib64/libwxmsw30ud.a(monolib_filename.o): In function `wxChmod(wxString const&, unsigned short)':
D:wxWidgets-3.0.2buildmsw/../../include/wx/filefn.h:513: undefined reference to `wxMSLU__wchmod(wchar_t const*, int)'
D:wxWidgets-3.0.2libgcc_lib64/libwxmsw30ud.a(monolib_filename.o): In function `wxOpen(wxString const&, int, unsigned short)':
D:wxWidgets-3.0.2buildmsw/../../include/wx/filefn.h:515: undefined reference to `wxMSLU__wopen(wchar_t const*, int, int)'
D:wxWidgets-3.0.2libgcc_lib64/libwxmsw30ud.a(monolib_file.o): In function `wxRemove(wxString const&)':
D:wxWidgets-3.0.2buildmsw/../../include/wx/wxcrt.h:758: undefined reference to `wxMSLU__wremove(wchar_t const*)'
D:wxWidgets-3.0.2libgcc_lib64/libwxmsw30ud.a(monolib_file.o): In function `wxAccess(wxString const&, unsigned short)':
D:wxWidgets-3.0.2buildmsw/../../include/wx/filefn.h:511: undefined reference to `wxMSLU__waccess(wchar_t const*, int)'
D:wxWidgets-3.0.2libgcc_lib64/libwxmsw30ud.a(monolib_filefn.o): In function `wxRename(wxString const&, wxString const&)':
D:wxWidgets-3.0.2buildmsw/../../include/wx/wxcrt.h:760: undefined reference to `wxMSLU__wrename(wchar_t const*, wchar_t const*)'
D:wxWidgets-3.0.2libgcc_lib64/libwxmsw30ud.a(monolib_filefn.o): In function `wxRmDir(wxString const&)':
D:wxWidgets-3.0.2buildmsw/../../include/wx/filefn.h:524: undefined reference to `wxMSLU__wrmdir(wchar_t const*)'
D:wxWidgets-3.0.2libgcc_lib64/libwxmsw30ud.a(monolib_filefn.o): In function `wxMkDir(wxString const&, unsigned short)':
D:wxWidgets-3.0.2buildmsw/../../include/wx/filefn.h:528: undefined reference to `wxMSLU__wmkdir(wchar_t const*)'
D:wxWidgets-3.0.2libgcc_lib64/libwxmsw30ud.a(monolib_ffile.o): In function `wxFopen(wxString const&, wxString const&)':
D:wxWidgets-3.0.2buildmsw/../../include/wx/wxcrt.h:754: undefined reference to `wxMSLU__wfopen(wchar_t const*, wchar_t const*)'

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

最后,我想出了如何使用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:mingw64bin
cd C:wxWidgets-3.0.2buildmsw
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