linker fehler bei verwendung von dll



  • 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" ändern

    ich 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.jpg

    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.

    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.gif

    der 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!!!


Anmelden zum Antworten