libxml++2.6 Headerpfade werden nicht richtig erkannt



  • Schau dir die -I Option des GCCs an: -I/usr/local/include/libxml++-2.6

    Ansonsten hilft dir vielleicht pkgconfig.



  • Also: die Dateien liegen unter

    /usr/include
    

    - das ist doch das Standard Include Verzeichnis, oder etwa nicht?

    Unter dem obenstehenden Pfad wurde beim Installieren das Verzeichnis libxml++-2.6 angelegt, welches ein Unterverzeichnis Namens libxml++ beinhaltet, in dem sich dann wiederum die Datei libxml++.h befindet.

    Normalerweise müsste ich in der Quellcodedatei

    #include <libxml++-2.6/libxml++/libxml.h>
    

    angeben, damit der Header gefunden wird (nach diesem Schema funktioniert es mit anderen externen Headern wie z.B. curl, den ich via

    #include <curl/curl.h>
    

    einbinde hervorragend, die File curl.h befindet sich z.B. auch unter

    usr/include/curl/curl.h
    

    .

    Trotzdem gibt es leider den oben beschriebenen Fehler (bei libxml, nicht bei curl).



  • 😕 Ich versteh es echt nicht mehr!
    Die Datei libxml++.h sowie das dazugehörige Verzeichnis libxml++ mitsamt seinem Inhalt und Unterordnern wurden in das gleiche Verzeichnis kopiert, wie die zu kompilierende Quellcodedatei.

    per "#include libxml++.h" wurde bzw. soll sie eingebunden werden. Als ich es auf die geleiche Weise im KDevelop versucht hatte, hat es funktioniert. Mache ich es von Hand im g++:

    libxml++.h:10:48: libxml++/exceptions/internal_error.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:11:45: libxml++/exceptions/parse_error.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:12:40: libxml++/parsers/domparser.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:13:40: libxml++/parsers/saxparser.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:14:33: libxml++/nodes/node.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:15:40: libxml++/nodes/commentnode.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:16:36: libxml++/nodes/element.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:17:44: libxml++/nodes/entityreference.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:18:37: libxml++/nodes/textnode.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:19:32: libxml++/attribute.h: Datei oder Verzeichnis nicht gefunden
    libxml++.h:20:31: libxml++/document.h: Datei oder Verzeichnis nicht gefunden

    Das Verzeichis IST vorhzanden. Ich kann es sehen, ansteuern, kopieren, was weiss ich, nur der Compiler findet es nicht...



  • Ja, aber da in /usr/include/libxml++-2.6/libxml++/libxml++.h Sachen stehen wie

    #include <libxml++/exceptions/internal_error.h>
    #include <libxml++/exceptions/parse_error.h>
    #include <libxml++/parsers/domparser.h>
    #include <libxml++/parsers/saxparser.h>
    #include <libxml++/nodes/node.h>
    

    ...musst du halt /usr/include/libxml++-2.6/ in deinen Include Path tun. Danach kannst du auch die libxml++.h einfacher mit

    #include <libxml++/libxml++.h>
    

    einbinden 🙂 Also einfach bei gcc die Option angeben, die kingruedi gesagt hat.



  • Sorry, nicht genau dieselbe Option, bei dir ist das ja nicht in /usr/local... versuch -I/usr/include/libxml++-2.6 😉



  • Danke, es hat funktioniert!



  • Es ist schaurig!!!!!

    Schon wieder der gleiche Mist!

    Im Programm steht:

    #include <libxml++/libxml++.h>
    

    g++ wird mitttels

    -I/usr/include/libxml++-1.0

    mitgeteilt, wo es sich die Sachen zu holen hat (das hat wirklich schonmal funktioniert) und jetzt schon wieder das:

    finaldelta.cpp:38:29: libxml/libxml++.h: Datei oder Verzeichnis nicht gefunden
    finaldelta.cpp:82: error: Fehler beim Parsen before ::' token finaldelta.cpp: In functionvoid print_node(...)':
    (...)

    Einfach nur frustrierend 😞



  • okay, es war eigene Doofheit, denn ich habe im Include nur libxml statt libxml++ geschrieben. Viel bedenklicher finde ich allerdings, das was mir der g++ jetzt zurückliefert, wo er libxml++ scheinbar richtiug verlinkt hat:

    /tmp/cceDuMqg.o(.text+0xd8): In function print_node(xmlpp::Node const*, unsigned)': : undefined reference totypeinfo for xmlpp::ContentNode'
    /tmp/cceDuMqg.o(.text+0xe0): In function print_node(xmlpp::Node const*, unsigned)': : undefined reference totypeinfo for xmlpp::Node'
    /tmp/cceDuMqg.o(.text+0x12b): In function print_node(xmlpp::Node const*, unsigned)': : undefined reference totypeinfo for xmlpp::TextNode'
    (...und immer so weiter)

    😕 WAT??? 😕

    So einen Fehler habe ich noch nie gesehen und wüsste gern, was es damit auf sich hat. Es scheint also ein Problem innerhalb von libxml zu sein (sind ja Funktionen daraus, die bemängelt werden...komisch).



  • Wahrscheinlich linkst Du nicht richtig.



  • ich linke wie folgt:

    g++ -o srv.cgi finaldelta.cpp stdsoap2.cpp soapC.cpp soapServer.cpp -lcurl -lmysqlclient -I/usr/include/libxml++-1.0

    (das letzte ist ein I wie Insel)

    sieht das falsch aus? Ich bin das manuelle linken nicht so gewöhnt und lass den Job am liebsten von der IDE machen 😉



  • Physikalischer Fehler schrieb:

    g++ -o srv.cgi finaldelta.cpp stdsoap2.cpp soapC.cpp soapServer.cpp -lcurl -lmysqlclient -I/usr/include/libxml++-1.0

    (das letzte ist ein I wie Insel)

    sieht das falsch aus?

    Ja, da fehlt wahrscheinlich ein -lxml++ oder so.



  • Nachtrag:

    Falls mal wer vor einem ähnlichen Problem steht:

    es muss -lxml++-2.6 (oder welche Version auch immer) heissen.


Anmelden zum Antworten