wxWidgets -> wxPack -> wxPlotCtrl -> Linker Error



  • Hallo,

    ich habe wxWidgets (wxPack) unter VC 2008 laufen. Bin noch ein ziemlicher Anfänger und will das Ganze auch nur für sehrsehr einfache Programme nutzen, aber zu meiner Überraschung anfänglich hat auch alles problemlos funktioniert...

    Jetzt steh ich allerdings vor dem Problem, dass ich in meine wxWidgets Oberfläche gerne einen simplem Graphen einbauen würde. Da wxPlotCtrl im wxPack und dem wxFormBuilder enthalten ist, dachte ich das müsste die einfachste Möglichkeit sein.

    Wenn ich jetzt allerdings eine wxPlotCtrl erstelle, bekomme ich immer folgende Fehlermeldung die mir leider absolut gar nix sagt:

    1>wxmsw28ud_plotctrl.lib(plotctrllib_fparser.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl std::_Xlength_error(char const *)" (?_Xlength_error@std@@YAXPBD@Z)" in Funktion ""protected: void __thiscall std::vector<unsigned int,class std::allocator<unsigned int> >::_Xlen(void)const " (?_Xlen@?$vector@IV?$allocator@I@std@@@std@@IBEXXZ)".
    1>wxmsw28ud_plotctrl.lib(plotctrllib_fpoptimizer.obj) : error LNK2001: Nicht aufgelöstes externes Symbol ""void __cdecl std::_Xlength_error(char const *)" (?_Xlength_error@std@@YAXPBD@Z)".
    1>wxmsw28ud_plotctrl.lib(plotctrllib_fparser.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl std::_Xout_of_range(char const *)" (?_Xout_of_range@std@@YAXPBD@Z)" in Funktion ""public: void __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Xran(void)const " (?_Xran@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEXXZ)".
    1>Debug\plttest2.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
    

    Hab jetzt in meiner absoluten Ratlosigkeit einmal versucht die wxmsw28ud_plotctrl.lib noch einmal (inklusive genauem Pfad) in den Projekt-Einstellungen hinzuzufügen.

    Komischerweise gibt's dann vom Linker keine Fehlermeldung, dafür

    Das Programm "[5876] plttest2.exe: Systemeigen" wurde mit Code -1073741515 (0xc0000135) beendet.
    

    und nichts passiert.

    Danke für jeden Hinweis den ihr mir geben könnt!!!



  • aja, ich benutze wxWidgets übrigens als statische Lib.



  • Deine Fehlermeldungen beziehen sich auf einen Linker-Fehler, der aussagt, dass die Binaries der std::_X* Funktionen nicht gefunden wurden.
    Dies kann zur Ursache haben, dass dein Plot mit anderen Bibliotheken kompiliert wurde als das Projekt, in dem du ihn nun linken willst.
    Verschiedene Compiler oder ein anderer Build-Typ, also MD oder MT, wurden wahrscheinlich benutzt.



  • Hi,

    danke für die deine Hilfe!

    Bin mir nicht sicher ob ich dich ganz verstanden habe, aber heißt dass (nachdem ich ja WxPack nutze, in dem die Libraries mit unterschiedlichen Compilern vorkompiliert enthalten sind) ich einfach nur in den Projekt-Einstellungen den Ordner in dem der Linker die Lib suchen soll, anpassen müsste?
    Das hab ich nämlich schon versucht, aber leider hat er VC dann behauptet die Libraries gar nicht mehr zu finden:-( Und WxWidgets als statische Lib zu nutzen hab ich auch schon versucht, allerdings ebenso ohne Erfolg.



  • Ich versuche es mal anders zu erklären:
    Stelle dir vor, dein wxPlot wurde mit MSVC10 als MT kompiliert. Das heißt, deine Bibliothek wurde erstellt mit der Annahme, dass bei Erstellung einer Anwendung wieder die gleichen Abhängigkeiten verfügbar sind, also die Compiler-Bibliotheken des 2010er Microsoft Compilers für Multithreaded-static.
    Jetzt linkst du allerdings deinen wxPlot in ein MSVC9 Projekt als MD. Älterer Compiler für Multithreaded-DLL. Der 2008er Compiler wird in den Compiler-Bibliotheken nicht das bereitstellen, was der wxPlot zum Auflösen der Referenzen braucht, also wird ein Fehler gemeldet.
    Du musst also sicherstellen, dass Projekt und wxPlot kompatibel sind. Wenn bei den vorkompilierten Binaries nichts zu finden ist, musst du halt selbst wxPlot kompilieren.



  • Hi,

    danke für die Erklärung, jetzt hab ichs verstanden. Hab jetzt auch versucht mir wxPlotCtrl (und wxThings, das braucht man ja offenbar dazu) selbst zu kompilieren....

    Nachdem das aber auch nicht funktioniert, würd ich gerne wissen ob jemand vielleicht eine andere (einfacher) Lösung kennt, um auf mein wxPanel einen ganz simplen Graphen zu zaubern?

    Es wär nämlich einfach nur ein netter Zusatz bei meinem Projekt, würde mich aber lieber auf den Kern des ganzen konzentrieren, anstatt mich mit Sachen herumzuschlagen die mir im Moment wohl einfach noch zu hoch sind:-(



  • Fragelix schrieb:

    ...um auf mein wxPanel einen ganz simplen Graphen zu zaubern?

    Einfach der eigenen wxPanel-Klasse einen Paint-Event Handler hinzufügen, der abhängig von den Daten der Klasse auf die Oberfläche malt.



  • ok danke, dann wird ich vielleicht einmal auf diese Art mein Glück versuchen...

    Andere Frage hätt ich aber noch: Wieso kommt denn die Linker-Fehlermeldung nicht wenn ich in den Einstellungen genau auf die Lib Verweise sondern stattdessen:

    "plttest2.exe": "C:\Windows\SysWOW64\ntdll.dll" wurde geladen
    "plttest2.exe": "C:\Windows\SysWOW64\kernel32.dll" wurde geladen
    "plttest2.exe": "C:\Windows\SysWOW64\KernelBase.dll" wurde geladen
    "plttest2.exe": "C:\Windows\SysWOW64\version.dll" wurde geladen
    Das Programm "[6876] plttest2.exe: Systemeigen" wurde mit Code -1073741515 (0xc0000135) beendet.
    

Log in to reply