我试图用TDM-GCC 4.7.1 32位在Windows10上编译wxWidgets 3.0.2项目,我得到以下错误:
编译
mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -Wall -std=c++11 -g -Wall -std=c++11 -g -Ilibrary\xerces-c-3.1.1\src -Ilibrary\mupdf-1.6\include -Ilibrary\wxWidgets-3.0.2\include -Ilibrary\wxWidgets-3.0.2\lib\wx\include\msw-unicode-3.0\ -Iinclude -IC:\TDM471-32\include -IC:\TDM471-32\include -c F:\Proj\Document.cpp -o obj\Debug\Document.o误差
In file included from library\wxWidgets-3.0.2\include/wx/string.h:45:0,
from library\wxWidgets-3.0.2\include/wx/memory.h:15,
from library\wxWidgets-3.0.2\include/wx/object.h:19,
from library\wxWidgets-3.0.2\include/wx/wx.h:15,
from F:\Proj\Document.h:4,
from F:\Proj\Document.cpp:1:
library\wxWidgets-3.0.2\include/wx/wxcrtbase.h: In function 'wchar_t* wxStrdup(const wchar_t*)':
library\wxWidgets-3.0.2\include/wx/wxcrtbase.h:680:68: error: 'wcsdup' was not declared in this scope
In file included from library\wxWidgets-3.0.2\include/wx/string.h:45:0,
from library\wxWidgets-3.0.2\include/wx/memory.h:15,
from library\wxWidgets-3.0.2\include/wx/object.h:19,
from library\wxWidgets-3.0.2\include/wx/wx.h:15,
from F:\Proj\Main.cpp:1:
library\wxWidgets-3.0.2\include/wx/wxcrtbase.h: In function 'wchar_t* wxStrdup(const wchar_t*)':
library\wxWidgets-3.0.2\include/wx/wxcrtbase.h:680:68: error: 'wcsdup' was not declared in this scope
In file included from library\wxWidgets-3.0.2\include/wx/crt.h:19:0,
In file included from library\wxWidgets-3.0.2\include/wx/crt.h:19:0,
from library\wxWidgets-3.0.2\include/wx/string.h:4305,
from library\wxWidgets-3.0.2\include/wx/memory.h:15,
from library\wxWidgets-3.0.2\include/wx/object.h:19,
from library\wxWidgets-3.0.2\include/wx/wx.h:15,
from F:\Proj\Document.h:4,
from F:\Proj\Document.cpp:1:
library\wxWidgets-3.0.2\include/wx/wxcrt.h: In function 'size_t wxStrnlen(const char*, size_t)':
library\wxWidgets-3.0.2\include/wx/wxcrt.h:173:92: error: 'strnlen' was not declared in this scope
library\wxWidgets-3.0.2\include/wx/wxcrt.h: In function 'size_t wxStrnlen(const wchar_t*, size_t)':
library\wxWidgets-3.0.2\include/wx/wxcrt.h:187:95: error: 'wcsnlen' was not declared in this scope
from library\wxWidgets-3.0.2\include/wx/string.h:4305,
from library\wxWidgets-3.0.2\include/wx/memory.h:15,
from library\wxWidgets-3.0.2\include/wx/object.h:19,
from library\wxWidgets-3.0.2\include/wx/wx.h:15,
from F:\Proj\Main.cpp:1:
library\wxWidgets-3.0.2\include/wx/wxcrt.h: In function 'size_t wxStrnlen(const char*, size_t)':
library\wxWidgets-3.0.2\include/wx/wxcrt.h:173:92: error: 'strnlen' was not declared in this scope
library\wxWidgets-3.0.2\include/wx/wxcrt.h: In function 'size_t wxStrnlen(const wchar_t*, size_t)':
library\wxWidgets-3.0.2\include/wx/wxcrt.h:187:95: error: 'wcsnlen' was not declared in this scope发布于 2016-05-06 16:53:36
我不知道这是否解释了您的问题,但无论如何,在命令行上使用-DwxUSE_UNICODE是错误的,所有wxUSE_XXX符号都应该定义为0或1,而不是空的。但是,即使是-DwxUSE_UNICODE=1也是错误的,因为这可能导致CRT/SDK和wxWidgets头之间的不匹配。相反,您应该预定义_UNICODE和/或UNICODE (前者由CRT使用,后者由SDK使用,但SDK也会选择带有下划线的版本),wxWidgets也会尊重它。
https://stackoverflow.com/questions/37033061
复制相似问题