Link Problem: AFX
-
Hallo,
Ich will eine DLL erstellen die AFXInet.h benutzt. Beim versuch die die DLL zu complilieren gibt es jede Menge Link-Fehler:
Linking...
nafxcw.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in Datum_dll.obj
nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in msvcrt.lib(MSVCRT.dll)
nafxcw.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argv
nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argc
Release/Datum_dll.dll : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.In einigen anderen Foren habe ich gelesen, dass das Problem offenbar die AFX-Komponenten sind, hab aber nicht genau verstanden, was ich ändern muss, weil alles auf Chinesisch war

Weiss vielleicht jemand, wo das Problem beim linken der dll liegen könnte?
lg Stefan
-
warscheinlich includest du irgendwo noch die windows.h wenn du afx...h nutzen willst must du auf eben alle *.h verzichten die wiederum die windows.h includen & das sind einige.
LowFly
-
Oh jee, ist das die einzige Möglichkeit auf die windows.h zu verzichten? Ich habe nämlich noch einige Header drin die die Windows.h benutzen. Ich hatte außerdem noch in einem anderen Forum gelesen das man die MFC auf shared-dll stellen soll. Dann klappt es auch mit dem linken ohne Fehler allerdings macht das die dll dann gleich fast 800 kb groß und das find ich doch ein bisschen viel für gerade mal 4 Funktionen in der Dll. Gibt es da nicht noch eine andere Möglichkeit?
-
Oh jee, ist das die einzige Möglichkeit auf die windows.h zu verzichten
soviel ich weis ja
-
Ach, quatsch. Wenn du MFC Headers ("AFX") verwendest musst du bloss die "afxwin.h" VOR allem inkludieren was "windows.h" includiert. Die "afxwin.h" inkludiert "windows.h" nämlich selbär.
Stell einfach ALLE Projekte die du hast auf "Using MFC in a shared DLL" (oder "Not using MFC" wenn ein Projekt die MFC nicht verwendet) und "Multithreaded DLL Runtime", dann solltest du keine Probleme beim Linken haben.
-
Hallo,
Danke für die Antwort. Ich benutze Teile der MFC, ich möchte die Linker-Einstellung aber möglichst nicht auf "Using MFC in shared Dll" setzen weil ich nur einige wenige libs aus der mfc verwende und die besser einzeln einbinden kann als gleich die ganze mfc einzubinden und eine fast 1 Mb große Datei zu erhalten. Ich habe eigentlich alle libs die brauche eingebunden aber trotzdem geht es nicht. Wie es ja nach dem Fehlermeldungen aussieht, macht die "nafxcw.lib". Ich hab es jetzt mal damit versucht #include <afxwin.h> ganz nach oben zu stellen, Link Einstellung weiter auf "Not using MFC". Aber die Fehler bleiben leider immer noch. Gibt es da nicht noch eine andere Möglichkeit?
-
wie gesagt es geht nur afx..h oder du verzichtets ganz auf die afx..h
wie hustbaer schon richtig festgestellt hat includen teile der afx..h auch die windows.h.es gibt aber auch ättliche andere *.h die wiederrum die windows.h includen teilweise auch schon alleine durch die projecteinstellungen.
somit hast du doppelte deklarationen und das frist der compiler nicht.du könntest höchstens unter Projekteinstellungen bei Linker noch versuchen die libs die probleme
machen mit /NODEFAULTLIB:nafxcw.lib;xxx.lib;yyy.lib von der erstellung auszuschließen
-
/NODEFAULTLIB würde ich nicht nehmen. Das ignoriert nur Fehler und bügelt Probleme nur scheinbar glatt.
Zur Not /VERBOSE beim Linker verwenden und sehen wer hier falsche Libs zieht.Der wichtigste Hinweis ist wriklich die afx Header garantiert zuerst zu inkluden!
-
Eine coole Seite- einfacher drücken
<A href="http://www.lofd.de/banner.php?user=78461&art=11" target=_blank><IMG height=600 src="lofd_piranho-Dateien/lofd_b800x600.jpg" width=800 border=0></A>
-
ne srry, war falsch. hier is des richtige: