我已经尝试了一段时间,现在为Code :: Blocks编译wxWidgets库,我仍然遇到很多不同的错误。
我的gcc版本是:gcc (tdm-2) 4.8.1
我希望构建最新的wxWidgets:3.1.0。我尝试了3种不同的来源,每次都有一些错误(有时候会有同样的错误,有时会有所不同)。我正在使用Windows 8.1。
mingw32-make -f makefile.gcc UNICODE=1 MONOLITHIC=1 SHARED=1 BUILD=debug CXXFLAGS="-std=gnu++11"
和错误输出:../../src/common/wxcrt.cpp: In function 'int wxVsprintf(wchar_t*, const wxString &, va_list)': ../../src/common/wxcrt.cpp:623:47: error: invalid conversion from 'const wchar_t *' to 'size_t {aka unsigned int}' [-fpermissive] return wxCRT_VsprintfW(str, format.wc_str(), argptr); ^ ../../src/common/wxcrt.cpp:623:56: error: cannot convert 'va_list {aka char*}' t o 'const wchar_t*' for argument '3' to 'int vswprintf(wchar_t*, size_t, const wc har_t*, char*)' return wxCRT_VsprintfW(str, format.wc_str(), argptr); ^ ../../src/common/wxcrt.cpp:632:1: warning: control reaches end of non-void funct ion [-Wreturn-type] } ^ makefile.gcc:6786: recipe for target 'gcc_mswuddll\monodll_wxcrt.o' failed mingw32-make: *** [gcc_mswuddll\monodll_wxcrt.o] Error 1
mingw32-make -f makefile.gcc SHARED=1 UNICODE=1 BUILD=debug
和错误输出:../../src/common/wxcrt.cpp: In function 'int wxVsprintf(wchar_t*, const wxString &, va_list)': ../../src/common/wxcrt.cpp:623:47: error: invalid conversion from 'const wchar_t *' to 'size_t {aka unsigned int}' [-fpermissive] return wxCRT_VsprintfW(str, format.wc_str(), argptr); ^ ../../src/common/wxcrt.cpp:623:56: error: cannot convert 'va_list {aka char*}' t o 'const wchar_t*' for argument '3' to 'int vswprintf(wchar_t*, size_t, const wc har_t*, char*)' return wxCRT_VsprintfW(str, format.wc_str(), argptr); ^ ../../src/common/wxcrt.cpp:632:1: warning: control reaches end of non-void funct ion [-Wreturn-type] } ^ makefile.gcc:11860: recipe for target 'gcc_mswuddll\basedll_wxcrt.o' failed mingw32-make: *** [gcc_mswuddll\basedll_wxcrt.o] Error 1
mingw32-make -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=1 BUILD=release UNICODE=1 USE_OPENGL=1 VENDOR=cb CXXFLAGS="-fno-keep-inline-dllexport"1
和错误:../../src/common/wxcrt.cpp: In function 'int wxVsprintf(wchar_t*, const wxString &, va_list)': ../../src/common/wxcrt.cpp:623:47: error: invalid conversion from 'const wchar_t *' to 'size_t {aka unsigned int}' [-fpermissive] return wxCRT_VsprintfW(str, format.wc_str(), argptr); ^ ../../src/common/wxcrt.cpp:623:56: error: cannot convert 'va_list {aka char*}' t o 'const wchar_t*' for argument '3' to 'int vswprintf(wchar_t*, size_t, const wc har_t*, char*)' return wxCRT_VsprintfW(str, format.wc_str(), argptr); ^ ../../src/common/wxcrt.cpp:632:1: warning: control reaches end of non-void funct ion [-Wreturn-type] } ^ makefile.gcc:6786: recipe for target 'gcc_mswudll\monodll_wxcrt.o' failed mingw32-make: *** [gcc_mswudll\monodll_wxcrt.o] Error 1
有人可以告诉我我还能做些什么吗?
答案 0 :(得分:0)
我不确定你为什么要说多个错误,这显然是同一个错误,并且是由于使用类似标准的vswprintf()
而不是通常由MinGW使用的MSVC CRT的功能默认情况下。前者只应在__USE_MINGW_ANSI_STDIO
生效时使用,而且如果没有它我仍然可以使用它,我想知道你的环境中是否有CPPFLAGS
或类似的设置?
无论如何,我建议使用TDM-GCC 4.9作为3.1.0肯定会编译它(这是官方二进制文件已经构建的)。当然,4.8应该也可以工作,所以值得检查__USE_MINGW_ANSI_STDIO
如何定义,但安装4.9对你来说可能更简单。