QT & Xerces
-
Hallo,
ich habe versucht meinen bestehenden und laufenden Code von MFC in QT zu exportieren.
Habe alle Einstellungen soweit abgeglichen. Erhalte nun jedoch folgende Linker-Fehler:
Verknüpfen... XmlBase2Dialog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport)public: static bool __cdecl xercesc_2_8::DOMImplementation::loadDOMExceptionMsg(enum xercesc_2_8::DOMException::ExceptionCode,unsigned short * const,unsigned int)" (__imp_?loadDOMExceptionMsg@DOMImplementation@xercesc_2_8@@SA_NW4ExceptionCode@DOMException@2@QAGI@Z)" in Funktion "__catch$?Init@XmlBase2Dialog@@QAE_NPBD@Z$0". XmlBase2Dialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static unsigned short const * const xercesc_2_8::XMLUni::fgXercesUseCachedGrammarInParse" (__imp_?fgXercesUseCachedGrammarInParse@XMLUni@xercesc_2_8@@2QBGB)". XmlBase2Dialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static unsigned short const * const xercesc_2_8::XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation" (__imp_?fgXercesSchemaExternalNoNameSpaceSchemaLocation@XMLUni@xercesc_2_8@@2QBGB)". XmlBase2Dialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static unsigned short const * const xercesc_2_8::XMLUni::fgXercesSchemaFullChecking" (__imp_?fgXercesSchemaFullChecking@XMLUni@xercesc_2_8@@2QBGB)". XmlBase2Dialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static unsigned short const * const xercesc_2_8::XMLUni::fgXercesSchema" (__imp_?fgXercesSchema@XMLUni@xercesc_2_8@@2QBGB)". XmlBase2Dialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static unsigned short const * const xercesc_2_8::XMLUni::fgDOMValidation" (__imp_?fgDOMValidation@XMLUni@xercesc_2_8@@2QBGB)". XmlBase2Dialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static unsigned short const * const xercesc_2_8::XMLUni::fgDOMNamespaces" (__imp_?fgDOMNamespaces@XMLUni@xercesc_2_8@@2QBGB)". XmlBase2Dialog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static class xercesc_2_8::DOMImplementation * __cdecl xercesc_2_8::DOMImplementationRegistry::getDOMImplementation(unsigned short const *)" (__imp_?getDOMImplementation@DOMImplementationRegistry@xercesc_2_8@@SAPAVDOMImplementation@2@PBG@Z)" in Funktion "__catch$?Init@XmlBase2Dialog@@QAE_NPBD@Z$0". XmlBase2Dialog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static unsigned short * __cdecl xercesc_2_8::XMLString::transcode(char const * const)" (__imp_?transcode@XMLString@xercesc_2_8@@SAPAGQBD@Z)" in Funktion "__catch$?Init@XmlBase2Dialog@@QAE_NPBD@Z$0". XmlBase2Dialog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static char * __cdecl xercesc_2_8::XMLString::transcode(unsigned short const * const)" (__imp_?transcode@XMLString@xercesc_2_8@@SAPADQBG@Z)" in Funktion "__catch$?Init@XmlBase2Dialog@@QAE_NPBD@Z$0". XmlBase2Dialog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: unsigned short const * __thiscall xercesc_2_8::XMLException::getMessage(void)const " (__imp_?getMessage@XMLException@xercesc_2_8@@QBEPBGXZ)" in Funktion "__catch$?Init@XmlBase2Dialog@@QAE_NPBD@Z$0". XmlBase2Dialog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static void __cdecl xercesc_2_8::XMLString::release(unsigned short * *)" (__imp_?release@XMLString@xercesc_2_8@@SAXPAPAG@Z)" in Funktion ""public: __thiscall XStr::~XStr(void)" (??1XStr@@QAE@XZ)".
Woran kann das liegen?
-
Musst du wohl noch die "Xerces Lib" hinzu linken.
-
Hab ich gemacht - dasselbe Prinzip wie vorher auch in der MFC Variante - habe sowohl die statische als auch die dll-Version probiert - immer derselbe Fehler.
Sämtliche Einstellungen im Projekt wurden kontrolliert - ich bin ehrlich gesagt ratlos
-
Bin letzte Woche über das selbe Problem gestolpert.
Falls das Problem also noch aktuell ist, versuche in deinem Projekt die Einstellung
"wchar_t als integrierten Typ behandeln" auf "ja" zu setzen.
Alle Funktionen die angemeckert werden haben einen wchar_t (unsignet short*) als Rückgabetyp bzw. als Parameter.
-
Das Problem ist das Qt standardmässig mit -Zc:wchar_t- compiliert wird. D.h. ein einfaches Umstellen auf 'wchar_t als integrierten Typ behandeln" auf "ja"' funktioniert unter Umständen nicht wirklich. Wenn dem so ist muss man entweder Qt ohne -Zc:wchar_t- kompilieren oder eben xerces mit dieser Option (und natürlich dein Programm ebenso)