使用MinGW编译wxWidgets-3.1.0失败,寻求解决方案
解决wxWidgets-3.1.0 MinGW编译时stdio.h的语法错误
问题重现
我正在编译wxWidgets-3.1.0,使用的命令是:
C:\wxWidgets-3.1.0\build\msw>mingw32-make -f makefile.gcc
编译过程中出现了以下错误:
if not exist ..\..\lib\gcc_lib\mswud mkdir ..\..\lib\gcc_lib\mswud gcc -c -o gcc_mswud\wxtiff_tif_win32.o -g -O0 -mthreads -DHAVE_W32API_H -DNDEBUG -I..\..\src\zlib -I..\..\src\jpeg -I..\..\src\tiff\libtiff -MTgcc_mswud\wxtiff_tif_win32.o -MFgcc_mswud\wxtiff_tif_win32.o.d -MD -MP ../../src/tiff/libtiff/tif_win32.c In file included from ../../src/tiff/libtiff/tiffio.h:257:0, from ../../src/tiff/libtiff/tiffiop.h:59, from ../../src/tiff/libtiff/tif_win32.c:30: c:\mingw\include\stdio.h:345:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__mingw__snprintf' extern int __mingw_stdio_redirect__(snprintf)(char*, size_t, const char*, ...); ^ makefile.gcc:6018: recipe for target 'gcc_mswud\wxtiff_tif_win32.o' failed mingw32-make: *** [gcc_mswud\wxtiff_tif_win32.o] Error 1
已经设置了以下环境变量:
WXCFG=C:\wxWidgets-3.1.0\lib\gcc_dll\mswuWXWIN=C:\wxWidgets-3.1.0
解决方案
这个错误本质是MinGW的头文件宏定义和wxWidgets编译参数不兼容导致的,试试下面几个方法:
升级/更换MinGW版本
旧版的MinGW(尤其是非MinGW-w64的版本)在snprintf相关宏定义上存在兼容性问题。建议切换到TDM-GCC 5.x及以上的稳定版本,或者使用MinGW-w64的发行版,这些版本对Windows平台的标准库支持更完善,能避免这类头文件冲突。添加编译宏解决冲突
在编译时添加宏定义来修正snprintf的重定向问题,直接在命令行传递参数:mingw32-make -f makefile.gcc CXXFLAGS="-D__MINGW_USE_VC2005_COMPAT"如果是C语言编译环节出问题,添加
CFLAGS参数:mingw32-make -f makefile.gcc CFLAGS="-D__MINGW_USE_VC2005_COMPAT"匹配环境变量的编译目标
你设置的WXCFG指向的是动态链接的Release版本(gcc_dll\mswu),但默认编译的是Debug版本(mswud),可以指定编译Release版本试试:mingw32-make -f makefile.gcc BUILD=release清理编译残留后重新编译
之前的编译缓存可能导致头文件引用混乱,先清理再重新编译:mingw32-make -f makefile.gcc clean mingw32-make -f makefile.gcc
内容的提问来源于stack exchange,提问作者avinashse
相关产品推荐
相关产品推荐

