Xerces-C Linker Error: undefined reference
-
Hallo!
Ich habe ein Problem mit meiner SAX2 DefaultHandler Klasse. Beim Linken bekommen ich folgenden Fehler.
# g++ -c -I/home/arek/dev/xerces-c/xerces-c_2_8_0-x86-linux-gcc_3_4/include sax1.cpp # g++ -o sax1 -L/home/arek/dev/xerces-c/xerces-c_2_8_0-x86-linux-gcc_3_4/lib sax1.o -lxerces-c sax1.o: In function `main': sax1.cpp:(.text+0x12c): undefined reference to `TestHandler::TestHandler()' collect2: ld gab 1 als Ende-Status zurück
Hier natürlich noch die Quellcodes. Die sax1.cpp sollte eigentlich fehlerfrei sein.
// sax1.cpp #include <xercesc/sax2/SAX2XMLReader.hpp> #include <xercesc/sax2/XMLReaderFactory.hpp> //#include <xercesc/sax2/DefaultHandler.hpp> #include <xercesc/util/XMLString.hpp> #include "TestHandler.hpp" #if defined(XERCES_NEW_IOSTREAMS) #include <iostream> using namespace std; #else #include <iostream.h> #endif XERCES_CPP_NAMESPACE_USE int main (int argc, char* args[]) { try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Error during initialization! :\n"; cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); return 1; } char* xmlFile = "login.xml"; SAX2XMLReader* parser = XMLReaderFactory::createXMLReader(); parser->setFeature(XMLUni::fgSAX2CoreValidation, true); parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true); // optional //DefaultHandler* defaultHandler = new DefaultHandler(); TestHandler* defaultHandler = new TestHandler(); parser->setContentHandler(defaultHandler); parser->setErrorHandler(defaultHandler); try { parser->parse(xmlFile); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); return -1; } catch (const SAXParseException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); return -1; } catch (...) { cout << "Unexpected Exception \n" ; return -1; } delete parser; delete defaultHandler; return 0; }
// TestHandler.hpp #include <xercesc/sax2/DefaultHandler.hpp> XERCES_CPP_NAMESPACE_USE #include <cstring> using namespace std; class TestHandler : public DefaultHandler { private: // public: TestHandler(); ~TestHandler(); virtual void startDocument(); virtual void endDocument(); };
// TestHandler.cpp #include "TestHandler.hpp" TestHandler::TestHandler() { } TestHandler::~TestHandler() { } void TestHandler::startDocument() { cout << "document start" << endl; } void TestHandler::endDocument() { cout << "document end" << endl; }
Ich hoffe, dass mir jemand helfen kann.
Gruß, aREK
-
Folgendes hat geholfen:
# g++ -c -I/home/arek/dev/xerces-c/xerces-c_2_8_0-x86-linux-gcc_3_4/include sax1.cpp [b]TestHandler.cpp[/b] # g++ -o sax1 -L/home/arek/dev/xerces-c/xerces-c_2_8_0-x86-linux-gcc_3_4/lib -lxerces-c sax1.o [b]TestHandler.o[/b]
Kann also geschlossen werden!
Gruß