【问题标题】:Multiple errors when compiling wxWidgets with gcc 4.8.1使用 gcc 4.8.1 编译 wxWidgets 时出现多个错误
【发布时间】:2016-06-30 03:32:39
【问题描述】:

我已经尝试了一段时间现在为 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" 和错误输出:
../../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 和错误输出:
../../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 和错误:
../../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

谁能告诉我我还能做什么?

【问题讨论】:

  • 您是否运行./configure 来配置源? (您应该以这种方式设置 unicode 等,而不是手动添加编译器开关)
  • @M.M 我没有,但我为什么要这样做?我没有找到任何关于它的信息。第二件事是,如果我使用的是 Windows,我应该如何运行它,而你编写它时就像使用 Linux 一样?
  • 应该有适合您平台的构建说明
  • 所以有(多个)但 1、2 和 3(如上所述)不起作用

标签: gcc compilation mingw wxwidgets mingw32


【解决方案1】:

我不确定您为什么要谈论多个错误,这显然是同一个错误,并且是由于使用了类似标准的 vswprintf() 而不是 MinGW 默认使用的 MSVC CRT 中的函数.前者只能在__USE_MINGW_ANSI_STDIO生效的情况下使用,没有它你仍然得到它很奇怪,不知道你的环境中是否有CPPFLAGS或类似的设置?

无论如何,我建议使用 TDM-GCC 4.9,因为 3.1.0 肯定可以使用它进行编译(这是官方二进制文件的构建方式)。当然,4.8 也应该可以工作,因此值得检查一下 __USE_MINGW_ANSI_STDIO 是如何定义的,但安装 4.9 对您来说可能会更简单。

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多