C++ und xerces - Probleme beim komplieren

Damm.O

Damm.O

Grünschnabel
Hallo,

ich bin gerade dabei C++ zu lernen und dachte eigentlich es würde ganz gut laufen - bis heute :( Nach einem langen Marathon habe ich es geschafft, Xerces 2.8 zu installieren und die Samples zu bauen :)

Nun habe ich einen Sample-Code mit dem ich eine XML-Daten parsen können sollte

Code:
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/PlatformUtils.hpp>

#include <iostream.h>

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"
                 << message << "\n";
         XMLString::release(&message);
	return 1;
        }

        XercesDOMParser* parser = new XercesDOMParser();
        parser->setValidationScheme(XercesDOMParser::Val_Always);    
        parser->setDoNamespaces(true);    // optional

        ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
        parser->setErrorHandler(errHandler);

        char* xmlFile = "x1.xml";

        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 DOMException& toCatch) {
            char* message = XMLString::transcode(toCatch.msg);
            cout << "Exception message is: \n"
                 << message << "\n";
            XMLString::release(&message);
            return -1;
        }
        catch (...) {
            cout << "Unexpected Exception \n" ;
            return -1;
        }

        delete parser;
        delete errHandler;
        return 0;
    }

diese Datei (parser.cpp) versuche ich mit dem Befehl
Code:
g++ -ansi -pedantic -o Parser parser.cpp

zu bauen und bekomme die folgenden Fehler

Code:
In Datei, eingefügt von /usr/include/c++/4.1.3/backward/iostream.h:31,
                 von parser.cpp:7:
/usr/include/c++/4.1.3/backward/backward_warning.h:32:2: Warnung: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
parser.cpp:58:6: Warnung: Kein Newline am Dateiende
/tmp/ccKJ4U1L.o: In function `main':
parser.cpp:(.text+0x85): undefined reference to `xercesc_2_7::XMLUni::fgXercescDefaultLocale'
parser.cpp:(.text+0xad): undefined reference to `xercesc_2_7::XMLPlatformUtils::Initialize(char const*, char const*, xercesc_2_7::PanicHandler*, xercesc_2_7::MemoryManager*, bool)'
parser.cpp:(.text+0xb9): undefined reference to `xercesc_2_7::XMemory::operator new(unsigned int)'
parser.cpp:(.text+0xc1): undefined reference to `xercesc_2_7::XMLPlatformUtils::fgMemoryManager'

und noch jede Menge mehr. Ich habe schon wie verrückt gegoogelt, konnte aber leider nichts entsprechendes finden :(

Kann mir vielleicht jemand helfen?

Vielen Dank,
Oliver
 
Ich vermute mal, das du beim Bauen auch noch den Pfad zu deiner Xerces-Installation angeben musst.

Sprich, du musst dem Compiler + Linker ja auch sagen, wo er die Header / libraries findet...
 
Mal ein schnell Schuss
Code:
g++ parser.cpp -o parser -L ../pfad/zu/xerces/lib -lxerces-c -I ../pfad/zu/xerces/include
Oder mal testen ob es tut wenn du LD_LIBRARY_PATH gesetzt hast.

greetings
 
Und der geht direkt ins Schwarze!! Also muss ich alle includes so einbinden? Das ist aber unschön, die Alternativer hiesse dann wohl makefile?

Vielen Dank!!
 
Sofern die xerces-lib über die Distro installiert ist, sollte ld und somit g++ diese selbstständig finden. Wichtig ist dann nur, dass du dem Compiler mitteilst, dass du diese Lib einbinden willst und der dafür notwendige Parameter ist '-lxerces-c'. Der Aufruf

Code:
g++ -ansi -pedantic -lxerces-c -o Parser parser.cpp

sollte eigentlich reichen.
 

Ähnliche Themen

Funktion nicht gefunden

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

dovecot und postfix Konfiguration Problem

Schwierigkeiten beim compillieren

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben