wxWidgets und VC++ Link Problem
-
Hi
Ich habe die libs von wxwidgets erstellt mit vc++. nun habe ich ein eigenes Projekt erstellt und folgendes reingeschrieben:
#include "wx/wx.h" class MyApp : public wxApp { public: virtual bool OnInit(); }; DECLARE_APP(MyApp) IMPLEMENT_APP(MyApp); bool MyApp::OnInit() { wxFrame *frame = new wxFrame((wxFrame*) NULL, -1, "Hello World"); frame->CreateStatusBar(); frame->SetStatusText("Hello World"); frame->Show(TRUE); SetTopWindow(frame); return true; }
Das kompilieren funktioniert 0 errors...
Aber das linken nicht. Bekomme immer folgende Fehlermeldungen:
--------------------Configuration: test - Win32 Debug--------------------
Linking...
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _free already defined in LIBCMTD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _malloc already defined in LIBCMTD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strncpy already defined in LIBCMTD.lib(strncpy.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strchr already defined in LIBCMTD.lib(strchr.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _atoi already defined in LIBCMTD.lib(atox.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _calloc already defined in LIBCMTD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strftime already defined in LIBCMTD.lib(strftime.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _tolower already defined in LIBCMTD.lib(tolower.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _memmove already defined in LIBCMTD.lib(memmove.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _exit already defined in LIBCMTD.lib(crt0dat.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _realloc already defined in LIBCMTD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __vsnprintf already defined in LIBCMTD.lib(vsnprint.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strpbrk already defined in LIBCMTD.lib(strpbrk.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _getenv already defined in LIBCMTD.lib(getenv.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _abort already defined in LIBCMTD.lib(abort.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __snprintf already defined in LIBCMTD.lib(snprintf.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fflush already defined in LIBCMTD.lib(fflush.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _setlocale already defined in LIBCMTD.lib(setlocal.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __stricmp already defined in LIBCMTD.lib(stricmp.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __CrtSetDbgFlag already defined in LIBCMTD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __close already defined in LIBCMTD.lib(close.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __write already defined in LIBCMTD.lib(write.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __commit already defined in LIBCMTD.lib(commit.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fclose already defined in LIBCMTD.lib(fclose.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strncmp already defined in LIBCMTD.lib(strncmp.obj)
LINK : warning LNK4098: defaultlib "MSVCRTD" conflicts with use of other libs; use /NODEFAULTLIB:library
test.obj : error LNK2001: unresolved external symbol "public: void _thiscall wxStringData::Free(void)" (?Free@wxStringData@@QAEXXZ)
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.test.exe - 28 error(s), 1 warning(s)
Weiss einer was bei den Settings im VC++ falsch ist damit ich das Projekt linken kann.
Vielen Dank
-
Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wie die Fehlermeldungen sagen bindest du die aufgezählte Funktionen doppelt ein also wenn ich das richtig verstehe bindest du eine eigene Libary ein???
Wenn ja ist das notwendig? Wenn das so ist versuche dochmal unter Projekte-Einstellungen->Linker die LIBCMTD.lib rauszunehmen, vielleicht funzt es dann, zumindest hast du hier Konflikte zwischen LIBCMTD.lib und MSVCRTD.lib. Versuch eine rausznehmen .EDIT: Wenn ich es mir so überlege kann der Fehler eigentlich nur in der :
MSVCRTD.lib(MSVCRTD.dll) liegen, a es erst beim liken auftritt. DLL werden erst zur Laufzeit eingebunden.
-
Vielen Dank bigborre
habe jetzt nur noch eine fehlermeldung:
--------------------Configuration: test - Win32 Debug--------------------
Linking...
test.obj : error LNK2001: unresolved external symbol "public: void _thiscall wxStringData::Free(void)" (?Free@wxStringData@@QAEXXZ)
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.test.exe - 2 error(s), 0 warning(s)
Weisst du an was das noch liegen kann?
Ich versuche die wxWidgets lib zu verwenden..Thx Sascha
-
Hmm, mit der wx.lib kenn ich mich nicht so aus, aber wie es aussieht rufst du eine Funktion aus wxWidgets.lib h
falsch auf, external Symbol die Meldung hatte ich noch nicht.Aber bei der Fehlermeldung 1 unaufgelöster externer Verweis (auch LNK 2001)
lag bei mir der Fehler an einem falschen Aufruf
Bsp:
in der DLL;__declspec(dllexport) void init();
dann habe ich sie in der Anwendunfg falsch aufgerufen:
[cpp]
__declspec(dllimport) int init();
[/cpp]So etwas muss es sein, schau noch mal genau, wie die Funktionen die du aufrufst in der wxWidgets.lib definiert sind, bzw benutz den Debugger um rauszufinden wo genau der Fehler liegt..
-
@saschaappel
Die Fehlermeldung besagt, dass du eine Funktion aufrufst, der Linker die Definition dieser aber nirgendwo finden kann. Hast du die entsprechende wxwidgets Lib dem Linker mitgegeben?
-
Hast du vielleicht schon eine Lösung zu dem Problem gefunden?
Ich versuche auch schon seit unzähligen Stunden wxWidgets in Verbding mit Visual Studio 2008 und 2010 zum Laufen zu bringen aber immer wieder stoße ich auf neue Probleme..Ich hab wxWidget jetzt schon mehrer male gebuildet mit verschiedenen Optionen, einmal hab ich es geschafft, die Debug Version hinzubekommen, nachdem ich dann aber die Release Version verwenden wollte gibt diese wieder nicht.
Derzeit habe ich auf dasselbe Problem, dass mehrer Definitionen scheinbar schon in der LIBCMTD.lib definiert wurden und der Linker mal wieder einige Errors meldet verständlicherweise.
Wie hast die die LIBCMTD.lib überhaupt aus dem Projekt rausgenommen?