2016-05-04 18 views
1

Ich versuche wxWidgets 3.0.2 Projekt auf Windows 10 mit TDM-GCC 4.7.1 32bit zu kompilieren, erhalte ich diesen Fehler unter:WxWidgets Projekt Kompilierung schlägt fehl unter Windows 10 mit TDM-GCC

Compilation

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 

Fehler

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 
+0

Haben Sie zuerst eine Konfiguration durchgeführt oder verwenden Sie Makefile direkt? – Igor

+0

Was meinst du? wxWidgets ist kompiliert, ich verwende es als Bibliothek, um cpp-Projekt zu kompilieren, das damit verbunden ist. – Kikapi

+0

also kommen diese Fehler vom Projekt und nicht von der Bibliothek selbst? Welche Version von gcc verwendest du? Wo hast du es her? Haben Sie wx mit dem gleichen Compiler erstellt? Wie bauen Sie Ihr Projekt? – Igor

Antwort

0

ich bin mir nicht sicher, ob dies ist, was dein Problem erklärt, aber, in jedem Fall ist die Verwendung von -DwxUSE_UNICODE in der Befehlszeile falsch, alle wxUSE_XXX Symbole sollen als 0 oder 1 definiert werden, nicht als nichts. Aber selbst -DwxUSE_UNICODE=1 wäre falsch, da dies zu falschen Übereinstimmungen zwischen CRT/SDK- und wxWidgets-Headern führen kann. Stattdessen sollten Sie _UNICODE und/oder UNICODE (ersteres wird von der CRT, letzteres vom SDK verwendet, aber das SDK wird die Version mit dem Unterstrich auch abholen) und wxWidgets wird es auch respektieren.