使用gcc 4.8.1编译wxWidgets时出现多个错误

时间:2016-03-14 21:43:26

标签: gcc compilation mingw wxwidgets mingw32

我已经尝试了一段时间,现在为Code :: Blocks编译wxWidgets库,我仍然遇到很多不同的错误。

我的gcc版本是:gcc (tdm-2) 4.8.1我希望构建最新的wxWidgets:3.1.0。我尝试了3种不同的来源,每次都有一些错误(有时候会有同样的错误,有时会有所不同)。我正在使用Windows 8.1。

  1. [1] mingw32-make -f makefile.gcc UNICODE=1 MONOLITHIC=1 SHARED=1 BUILD=debug CXXFLAGS="-std=gnu++11" 和错误输出:
  2. ../../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
    
    1. [2] mingw32-make -f makefile.gcc SHARED=1 UNICODE=1 BUILD=debug和错误输出:
    2. ../../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
      
      1. [3] 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和错误:
      2. ../../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
        

        有人可以告诉我我还能做些什么吗?

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对你来说可能更简单。