Многочисленные ошибки при компиляции wxWidgets с gcc 4.8.1

Я уже некоторое время пытаюсь скомпилировать библиотеку wxWidgets для Code::Blocks, и я все еще получаю много разных ошибок.

Мои версии 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

Может кто-нибудь, пожалуйста, посоветуйте мне, что еще я могу сделать?

1 ответ

Я не уверен, почему вы говорите о множественных ошибках, это явно одна и та же ошибка и связано с использованием стандартных vswprintf() вместо функции из MSVC CRT, которая обычно используется MinGW по умолчанию. Первый должен использоваться только тогда, когда __USE_MINGW_ANSI_STDIO в действительности, и это очень странно, что вы все еще получаете это без него, интересно, если у вас есть CPPFLAGS или подобный набор в вашей среде?

В любом случае, я бы рекомендовал использовать TDM-GCC 4.9, так как 3.1.0 определенно компилируется с ним (это то, с чем были собраны официальные двоичные файлы). Конечно, 4.8 тоже должен работать, поэтому стоит проверить, как __USE_MINGW_ANSI_STDIO получить определение, но установка 4.9, вероятно, будет проще для вас.

Другие вопросы по тегам