XercesC, C++ und Eclipse Ganymede



  • Moins,

    mein Plan: Parsen einer XML-Datei mit Xerces-C. Das Ganze
    unter Eclipse Ganymede mit CDT realisiert.
    Mein Problem: Der Linker meckert.
    Mein Vorgehen bis dahin:

    Erstelle ein Codegerüst (Kopie aus dem Netz). Der Code ist
    unten angehängt.

    Unter Projekt->Eigenschaften->C/C++ General->Paths und Symbols
    für GNU C++ das Verzeichnis der Header-Dateien angegeben.

    Unter Projekt->Eigenschaften->C/C++ Build->Settings im Reiter
    Tool Settings und dort unter MinGW C++ Linker->Libraries für
    Libraries (-l) "xerces-c_3.lib" und für Library search path (-L)
    "C:\xerces-c-3.0.0-x86-windows-vc-9.0\lib" angegeben.

    Ein Build führt dann zur Fehlermeldung 1.

    Hmh, vlt muss ja die Endung weg... Also als Library "xerces-c_3"
    angegeben. Nein, führt zu Fehlermeldung 2.

    Nun steh ich da mit Fragezeichen im Kopf. Vermutlich ist das
    ein ganz banaler Fehler, den ich hier mache. Ich hoffe mal, dass
    mich einer von euch vom Schlauch nehmen kann.

    Gruß,
    Peter

    ##########
    # Anhang #
    ##########

    -------------------
    | Fehlermeldung 1 |
    -------------------

    **** Internal Builder is used for build ****
    g++ -LC:\xerces-c-3.0.0-x86-windows-vc-9.0\lib -o Test_Xerces.exe src\Test_Xerces.o -lxerces-c_3.lib
    C:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -lxerces-c_3.lib
    collect2: ld returned 1 exit status
    Build error occurred, build is stopped
    Time consumed: 78 ms.

    -------------------
    | Fehlermeldung 2 |
    -------------------

    **** Build of configuration Debug for project Test_Xerces ****

    **** Internal Builder is used for build ****
    g++ -LC:\xerces-c-3.0.0-x86-windows-vc-9.0\lib -o Test_Xerces.exe src\Test_Xerces.o -lxerces-c_3
    src\Test_Xerces.o: In function main': D:/trunk/eclipse-cpp-workspace/Test\_Xerces/Debug/../src/Test\_Xerces.cpp:17: undefined reference to_imp___ZN11xercesc_3_06XMLUni22fgXercescDefaultLocaleE'
    D:/trunk/eclipse-cpp-workspace/Test_Xerces/Debug/../src/Test_Xerces.cpp:17: undefined reference to \_imp\_\_\_ZN11xercesc\_3\_016XMLPlatformUtils10InitializeEPKcS2\_PNS\_12PanicHandlerEPNS_13MemoryManagerE' D:/trunk/eclipse-cpp-workspace/Test\_Xerces/Debug/../src/Test\_Xerces.cpp:26: undefined reference to_imp___ZN11xercesc_3_016XMLPlatformUtils9TerminateEv'
    collect2: ld returned 1 exit status
    Build error occurred, build is stopped
    Time consumed: 391 ms.

    -------------
    | Quellcode |
    -------------

    #include <xercesc/util/PlatformUtils.hpp>
    // Other include files, declarations, and non-Xerces-C++ initializations.
    
    using namespace xercesc;
    
    int main(int argc, char* argv[])
    {
      try {
        XMLPlatformUtils::Initialize();
      }
      catch (const XMLException& toCatch) {
        // Do your failure processing here
        return 1;
      }
    
      // Do your actual work with Xerces-C++ here.
    
      XMLPlatformUtils::Terminate();
    
      // Other terminations and cleanup.
      return 0;
    }
    


  • ich weiss nicht wieweit ld mit vs9 kompilierten libraries umgehen kann, daher vermute ich hier den hund 🙂 (c++ name mangling)

    hast die sourcen für xerxes-c++ ? dann bau dir die library selber mit gcc.



  • Hallo,

    hab gerade bemerkt, dass dieser Beitrag eher in die Abteilung "Compiler und IDE" gehört. Sollte ein Mod das lesen bitte dorthin verschieben (oder löschen).

    @inimp: Die Quellen hab ich. Es sind sogar Projekt-dateien enthalten... allerdings für VisualC++ und nicht für Eclipse. Da ich unter WinXP code müsste ich mir erstmal Cygwin installieren, um die Makefile ausführen zu können.
    Ein einfaches "Neues Projekt", die Verzeichnisse importieren und bauen tut
    (natürlich) nicht.

    Gruß,
    Peter



  • da wird nicht viel passieren ausser das jede cpp datei kompiliert wird
    und dann mit dem ar tool in ein archiv (.a) (unix version von .lib) erzeugt wird.
    oder ein shared object (.so äquivalent zu .dll).

    dh, im prinzip müsste es aussreichen die makefile nach include pfaden abzusuchen,

    1. jede dependency zu organisieren,
    2. projekt erstellen (library projekt)
    3. cpp files ins projekt hinzufügen
    4. projekt mit den includes + library dependencies einstellen
    5. kompilieren 🙂


  • Hab mir mal die makefile angeschaut. Unter Linux würde ich ein "./configure" gefolgt von einem "./make" machen. Hier http://xerces.apache.org/xerces-c/build-3.html existiert eine Anleitung für MinGW (ist bei mir drauf).
    Kurzum, deine Vorgehensweise zu verwenden ist hierbei für mich nicht durchführbar.

    Mittlerweile hab ich MSYS installiert und obige Anweisungen durchgeführt. Es kompiliert und linkt wunderbar... nur eine .lib fehlt mir noch. Dabei hab ich
    die Build-Instructions eingehalten (=configure --LDFLAGS=no-undefined).

    Ich such weiter... irgendwie muss es gehen.


Anmelden zum Antworten