linker fehler bei verwendung von dll
-
dll
zusätzlich:
comctl32.lib
rpcrt4.lib
ecwdaWin.lib
libxml2.lib
wxmsw28ud_core.lib
wxbase28ud.libvererbt:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.libapp
zusätzlich:libConfig.lib
ecwdaWin.lib
libsfWin.lib
libdfWin.lib
passEnc.lib
comctl32.lib
rpcrt4.lib
winmm.lib
wsock32.lib
version.lib
libxml2.lib
wxmsw28ud_core.lib
wxbase28ud.libvererbt:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.libich hatte auch schonmal
wxmsw28ud_core.lib
wxbase28ud.libgar nicht drin, hat auch nix geändert.
danke für deine mühe.
-
Hmm, also eigentlich sollte das gehen. Tut mir leid, das is alles so eigentlich in Ordnung.... ist wxPack auch mit dem MSVC2010 kompiliert?
Ich schätze mal es bleibt Dir nix anderes übrig als die Library mal selber mit dem VC2010 zu kompilieren und es dann nochmal zu versuchen.Ich verwende leider nur VC2008, kann Dir daher von vornherein keine Tipps geben.gar nicht drin, hat auch nix geändert
Hast Du auch alles nochmal kompiliert? Also komplett neu und vorher nen "Clean" durchgeführt?
rya.
-
ich hab die projektmappe bereinigt und alles neu kompiliert, ändert sich nix.
dann mach ich mich mal morgen dran, 2.9.1 mit meinem vs2010 neu zu kompilieren und melden mich dann.
danke!
-
ok, ich bin jetzt auf 2.9.1 selber kompiliert mit vs2010 und der fehler existiert leider immernoch:
1>wxbase29ud.lib(object.obj) : error LNK2005: "public: __thiscall wxFormatString::wxFormatString(wchar_t const *)" (??0wxFormatString@@QAE@PB_W@Z) ist bereits in libConfig.lib(libConfig.dll) definiert.
1>wxbase29ud.lib(object.obj) : error LNK2005: "public: __thiscall wxFormatString::operator wchar_t const *(void)const " (??BwxFormatString@@QBEPB_WXZ) ist bereits in libConfig.lib(libConfig.dll) definiert.
1>wxbase29ud.lib(object.obj) : error LNK2005: "public: __thiscall wxString::wxString(wchar_t const *)" (??0wxString@@QAE@PB_W@Z) ist bereits in libConfig.lib(libConfig.dll) definiert.
1>wxbase29ud.lib(object.obj) : error LNK2005: "public: __thiscall wxString::~wxString(void)" (??1wxString@@QAE@XZ) ist bereits in libConfig.lib(libConfig.dll) definiert.
1>wxbase29ud.lib(object.obj) : error LNK2005: "public: __thiscall wxFormatString::~wxFormatString(void)" (??1wxFormatString@@QAE@XZ) ist bereits in libConfig.lib(libConfig.dll) definiert.das sind wieder nur die ersten fünf meldungen, die liste ist sehr lang.
noch eine idee vielleicht, jemand?!
auf welchem weg kann denn wxString schon in libConfig.dll definiert sein?
-
hallo zusammen,
ich bin mir mittlerweile recht sicher, dass das problem wie von Scorcher24 schon gesagt das statische linken der wx libs ist. das problem ist nun, dass ich das dynamische linken nicht hinbekomme.
folgendes habe ich gemacht, fehlt da vielleicht noch etwas?a) wx nach folgender anleitung mit profil DLL debug builden: http://wiki.wxwidgets.org/Microsoft_Visual_C%2B%2B_Guide#Visual_Studio_C.2B.2B_2010
b) präprozessor symbole vom wx build in meine dll, die neben der app auch wxwidgets benutzt, übernehmen
c) in visual studio unter linker -> zusätzliche bibliotheksverzeichnisse den eintrag "(WXWIN)\\lib\\vc\_lib" in "(WXWIN)\lib\vc_dll" ändernich bekomme dann eine lange liste von fehlern, die mit vielen einträgen der art
error LNK2001: Nicht aufgelöstes externes Symbol ""bool const wxFalse" (?wxFalse@@3_NB)".
meine einstellungen sind:
compiler:/I"E:\_WINOHNEDLL\src" /I"F:\wxWidgets_2_9\include" /I"F:\wxWidgets_2_9\include\msvc" /I"F:\Programme\National Instruments\NI-DAQ\DAQmx ANSI C Dev\include" /ZI /nologo /W3 /WX- /Od /Oy- /D "_WINDLL" /D "WXMAKINGDLL" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /GR /Fp"Debug\ecwdaWin.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /FI"F:\wxWidgets_2_9/include/wx/wxprec.h" /FI"F:\wxWidgets_2_9/include/msvc/wx/setup.h" /analyze- /errorReport:queue
linker:
/OUT:"E:\libecwda\lib\ecwdaWin.dll" /INCREMENTAL /NOLOGO /LIBPATH:"F:\Programme\National Instruments\NI-DAQ\DAQmx ANSI C Dev\lib\msvc" /LIBPATH:"F:\wxWidgets_2_9/lib/vc_dll" /DLL "NIDAQmx.lib" "comctl32.lib" "rpcrt4.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /NODEFAULTLIB:"LIBCMTD" /MANIFEST /ManifestFile:"Debug\ecwdaWin.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"E:\libecwda\lib\ecwdaWin.pdb" /SUBSYSTEM:WINDOWS /PGD:"E:\libecwda\lib\ecwdaWin.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE
hat jemand eine idee?
-
Welche Library hast Du denn gebaut von wx?
Die .dll Version oder die statische?
rya.
-
ich dachte, man baut mit dem "DLL Debug" profil die eben die dll version, oder? hab bisher auch kein anderes profil kompiliert, damit es nichtsd zum verwecheln gibt.
-
Nach einer Tasse Kaffee sticht mir das hier ins Auge:
c) in visual studio unter linker -> zusätzliche bibliotheksverzeichnisse den eintrag "(WXWIN)\\lib\\vc\_lib" in "(WXWIN)\lib\vc_dll" ändern
Wenn Du wx 2.9.1 hast, dann hast braucht die WXWIN Variable nicht, die Du ja bestimmt auch gar nicht gesetzt hast, oder doch? Weil das würde das ganze erklären. Gib als Pfad in den Linkereinstellungen von Visual Studio einfach den ganzen Pfad an, in dem sich dein wxWidgets befindet.
Du machst Dir das glaube ich unnötig kompliziert.
So schaut das bei mir aus:
http://img30.imageshack.us/img30/7056/vc1l.jpg
http://img183.imageshack.us/img183/9113/vc2h.jpgich dachte, man baut mit dem "DLL Debug" profil die eben die dll version, oder? hab bisher auch kein anderes profil kompiliert, damit es nichtsd zum verwecheln gibt.
Das ist richtig.
-
moin,
schönes ding mit den verzeichnissen, macht es ein wenig übersichtlicher. ich hatte vorher WXWIN als umgebungsvariable gesetzt.
jetzt sieht es bei mir so aus:
http://img835.imageshack.us/img835/5417/includelib1.gifder fehler ist aber noch derselbe.
-
ich habe bei deinen einstellungen gesehen, dass du garnicht "[...]\wxWidgets_2_9\include\msvc" includen musst. kann das bei mir ein problem sein?
wenn ich das raus nehme, kommen lauter solche fehler:
fatal error C1083: Datei (Include) kann nicht geöffnet werden: "wx/setup.h": No such file or directory
hmmm....
ich habe jetzt auch mal testweise wx ohne die speziellen dateien für vs2010 gebuilded, die man unter http://forums.wxwidgets.org/viewtopic.php?t=27630 laut der vorher erwähnten anleitung runterladen kann. das ergebnis ist immernoch dasselbe.
-
Kompilier mal ein Sample ob das geht ausm Sample-Ordner.. wenn das auch nicht geht stimmt iwas bei Dir nicht :p.
rya.
-
das sample project calendar kann ich kompilieren, ist aber auch statisch gelink, genauso wie alle anderen sample projekte. kann ich das vielleicht irgendwie auf statisches linken umstellen?
-
und ich kann die dll problemlos kompilieren, wenn ich das das bibliotheksverzeichnis von vc_dll auf vc_lib stelle...
das bringt mir aber nix, wiel ich dynamisch linken MUSS, sonst bekomme ich logischerweise "symbol xyz ist bereits in dll definiert" fehler bei wx komponenten wenn ich meine app kompiliere.
-
das problem ist gelöst, ich hatte falsche präprozessor symbole. bei verwendung von nur _DEBUG und WXUSINGDLL ging dann alles.
vielen dank für eure mühe!!!