Verwendung von xerces-c-3.2



  • Hallo zusammen,

    ich bin ein Anfänger, wenn es um C++ geht und hoffe, dass ihr mir helfen könnt. Es geht um Folgendes:

    Nach etwa einer Woche habe ich es nun endlich geschafft, xerces (Version 3.2.0) in mein Eclipse-Projekt einzubinden. Nun möchte ich meiner ersten Versuche starten, um xerces zu verwenden. Mein Ausgangspunkt ist die folgende Anleitung:

    https://xerces.apache.org/xerces-c/program-3.html

    Mein Code sieht folgendermaßen aus:

    #include<iostream>
    #include <xercesc/util/PlatformUtils.hpp>
    
    int main() {
    	try {
    		xercesc::XMLPlatformUtils::Initialize();
    	}
    	catch (...) {
    		std::cerr << "Error while initialization" << std::endl;
    		xercesc::XMLPlatformUtils::Terminate();
    		return 1;
    	}
    
    	xercesc::XMLPlatformUtils::Terminate();
    
    	return 0;
    }
    

    Aus irgendeinem Grund kann aber die Klasse XMLPlatformUtils nicht aufgelöst werden. Ich erhalte die Fehlermeldungen

    C:\Programmieren\C++\Eclipse Projects\FlightPlan\Debug/../src/main.cpp:8: undefined reference to `_imp___ZN11xercesc_3_26XMLUni22fgXercescDefaultLocaleE'
    C:\Programmieren\C++\Eclipse Projects\FlightPlan\Debug/../src/main.cpp:8: undefined reference to `_imp___ZN11xercesc_3_216XMLPlatformUtils10InitializeEPKcS2_PNS_12PanicHandlerEPNS_13MemoryManagerE'
    C:\Programmieren\C++\Eclipse Projects\FlightPlan\Debug/../src/main.cpp:16: undefined reference to `_imp___ZN11xercesc_3_216XMLPlatformUtils9TerminateEv'
    C:\Programmieren\C++\Eclipse Projects\FlightPlan\Debug/../src/main.cpp:12: undefined reference to `_imp___ZN11xercesc_3_216XMLPlatformUtils9TerminateEv'
    

    Ich habe gesehen, dass in der Header-Datei PlatformUtils.hpp der Namespace xercesc_3_2 verwendet wird und es auch schon mit diesem Namespace versucht. Das funktioniert allerdings auch nicht.

    Hat jemand eine Idee, warum es nicht funktioniert?



  • Du hast zwar die Header im Projekt, die Lib wird aber wohl nicht dazu gebunden.

    Dein Problem ist aber deine IDE und nicht C++ => falsches Forum.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke, der Hinweis hat mir genügt. Das Problem war, dass ich beim Einbinden der Library (-l) den kompletten Pfad zur Library angegeben habe.

    Danke vielmals.



  • Es scheint doch noch nicht richtig zu funktionieren. Hier noch einmal mein Code:

    #include<iostream>
    #include <xercesc/util/PlatformUtils.hpp>
    
    int main() {
    	  std::cout << "Program started" << std::endl;
        try {
            xercesc::XMLPlatformUtils::Initialize();
        }
        catch (...) {
            std::cerr << "Error while initialization" << std::endl;
            xercesc::XMLPlatformUtils::Terminate();
            return 1;
        }
    
        xercesc::XMLPlatformUtils::Terminate();
    
        std::cout << "Program finished" << std::endl;
        system("PAUSE");
        return 0;
    }
    

    Ich kann diesen Code jetzt kompilieren. Wenn ich den Code in Eclipse ausführen möchte (egal ob Debug- oder Release-Konfiguration), dann erhalte ich bei der Ausgabe lediglich folgende Meldungen:

    FlightPlan.exe [C/C++ Application] gdb
    [New Thread 1904.0x13d0]
    [New Thread 1904.0xadc]
    [New Thread 1904.0x22d4]
    [New Thread 1904.0x1850]

    Und es passiert sonst nichts. Wenn ich die FlightPlan.exe jedoch außerhalb von Eclipse aufrufe, dann verhält sich die Anwendung genau so, wie sie sollte (die zwei Ausgaben "Program started" und "Program finished" erscheinen). Daher denke ich, dass es sich wieder nur um falsche Einstellungen in meiner IDE handelt.

    Wenn ich die Zeilen, die auf xercesc verweisen, auskommentiere, dann funktioniert es jedoch auch aus der IDE.

    Leider kenne ich mich noch zu wenig aus, um sagen zu können, welche IDE-Einstellungen dafür verantwortlich sein könnten.

    - In den Projekt-Einstellungen habe ich beim Include Pfad (-I) des CGG C++ Compiler den Pfad "C:\MinGW\xerces-c\include" verwendet (dort liegen die Quelltext-Dateien)
    - Bei den Libraries für den MinGW C++ Linker habe ich folgende Einstellungen:
    Libraries (-l): xerces-c
    Library search path (-L): C:\MinGW\xerces-c\bin
    Bei den Libraries bin ich mir nicht sicher, ob ich auf die Datei C:\MinGW\xerces-c\bin\libxerces-c.dll oder auf die Datei C:\MinGW\xerces-c\lib\libxerces-c.dll.a verweisen muss. Ich habe es mit beiden versucht, aber ohne Erfolg.


Anmelden zum Antworten