brauche Hilfe beim einbinden von Bibliotheken in C++!!!



  • Hi Leute,

    Ich habe echte Probleme, beim einbinden von Bibliotheken. Bei den Bibliotheken wo ich es bisher, sogar mit Anleitung, versucht habe Bibliotheken einzubinden, gab es immer Fehler, dass er was nicht finden kann. Das ist bei der Bibliothek von id3lib, sowie bei der Bibliothek von Xerces C++ so gewesen, jedesmal kann er was aus der Bibliothek nicht finden!
    Ich geb mal ein Beispielcode für Xerces C++.

    #include <xercesc/util/PlatformUtils.hpp>
    #include <locale.h>
    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	// setzen des aktuellen Gebietsschemas
    	setlocale(LC_ALL, NULL);
    
    	// ...ausgenommen sind Ziffern
    	setlocale(LC_NUMERIC, "C");
    
    	try
    	{
    		XMLPlatformUtils::Initialize();
    	}
    	catch(const XMLException& c_roToCatch)
    	{
    		cout << "Fehler bei der Initialisierung: ";
    			 << c_roToCatch.getMessage() << endl;
    		return 1;
    	};
    
    	// Ab hier kann mit der Bibliothek gearbeitet werden.
    
    	XMLPlatformUtils::Terminate();
    
    	return 0;
    }
    

    genauso steht es in der Anleitung drin, und als fehler spuckt er mir folgendes aus:

    xml1.cpp: In function `int main(int, char**)':
    xml1.cpp:16: error: `XMLPlatformUtils' undeclared (first use this function)
    xml1.cpp:16: error: (Each undeclared identifier is reported only once for each
       function it appears in.)
    xml1.cpp:16: error: parse error before `::' token
    xml1.cpp:18: error: parse error before `&' token
    xml1.cpp: At global scope:
    xml1.cpp:27: error: Syntaxfehler before `::' token
    

    Was ähnliches schreibt er auch bei id3lib hin!
    Achso, ich arbeite mit dem gcc!

    Ich hoffe sehr, das mir jemand dabei helfen kann.



  • hi,
    wie bindest du die Bibliothek denn ein?
    Bei gcc erfolgt das mit der Option -l.
    z.B.

    deine Lib: lib_meineLib.a
    
    Aufruf: gcc ... -lmeineLib
    

    EDIT: Rechtschreibung 😉

    Tschau Gartenzwerg



  • Hi Gartenzwerg,

    Es müsste doch aber auch ausreichen, die header-dateien einzubinden die dafür benötigt werden oder nicht, wozu hat man die denn sonst, außerdem stand nichts in der anleitung dass man das auch noch mit der -lmeine_lib option oder so einbinden muss!



  • hi,
    die Headerdateien sind nur die Schnittstellen für deine Programme. Die eigentlichen Funktionen dieser Klassen, die in den Headerdateien stehen, befinden sich in der Lib. Damit dein Programm weiß, was es machen soll, benötigst du die entsprechende Lib zu den Headerdateien.

    Tschau Gartenzwerg



  • Aaah,

    und warum steht davon nie was in den Anleitungen?
    Und welche müsste ich in meinem Beispiel einbinden?

    Danke.



  • hi,
    wo hast du denn das Beispiel her?
    Ich habe keine Ahnung, was Xerces ist. Hast du mal ein Link oder so, vielleicht kann ich dir denn sagen, welche Lib du brauchst.

    Tschau Gartenzwerg



  • Das beispiel hab ich aus dem XML-Magazin her. Den Artikel dazu hab ich als PDF vorliegen. Frag mich jetzt aber bitte nicht, woher ich das genau herhabe, das weiß ich nämlcih mittlerweile auch nicht mehr! 😃
    Xerces C++ ist ein XML Parser für C++! Das gibts auch als Java oder Perl Variante, die dinger kann man sich von der Apache-Homepage runterladen!
    Ich hab auch gleich mal bei www.apache.org nachgeschaut und gesehen das man noch vor jeder xercesc funktion auch ein xercesc:: setzen sollte, damit der das auch aus diesem namensraum annimmt! :D. Aber ich stolpere natürlich von einem problem ins nächste! jetzt macht er nach folgender Änderung:

    #include <xercesc/util/PlatformUtils.hpp>
    #include <locale.h>
    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	// setzen des aktuellen Gebietsschemas
    	setlocale(LC_ALL, NULL);
    
    	// ...ausgenommen sind Ziffern
    	setlocale(LC_NUMERIC, "C");
    
    	try
    	{
    		xercesc::XMLPlatformUtils::Initialize();
    	}
    	catch(const xercesc::XMLException& c_roToCatch)
    	{
    		cout << "Fehler bei der Initialisierung: "
    			 << c_roToCatch.getMessage() << endl;
    		return 1;
    	};
    
    	// Ab hier kann mit der Bibliothek gearbeitet werden.
    
    	xercesc::XMLPlatformUtils::Terminate();
    
    	return 0;
    }
    

    folgenden fehler:

    /tmp/ccmXC42A.o(.text+0x39): In function `main':
    : undefined reference to `xercesc_2_3::XMLUni::fgXercescDefaultLocale'
    /tmp/ccmXC42A.o(.text+0x3e): In function `main':
    : undefined reference to `xercesc_2_3::XMLPlatformUtils::Initialize(char const*, char const*, xercesc_2_3::PanicHandler*, xercesc_2_3::MemoryManager*)'
    /tmp/ccmXC42A.o(.text+0xd7): In function `main':
    : undefined reference to `xercesc_2_3::XMLPlatformUtils::Terminate()'
    /tmp/ccmXC42A.o(.gcc_except_table+0x20): undefined reference to `typeinfo for xercesc_2_3::XMLException'
    collect2: ld returned 1 exit status
    

    ich hasse sowas.

    Trotzdem danke 😉



  • hi,
    also "undefined reference to '...'" weist immer auf eine fehlende Lib hin, aber welche das genau ist, kann ich dir leider nicht sagen. Dazu müsste ich mich mit dem Thema beschäfftigen, aber das schaffe ich heute nicht mehr. Ich gucke da morgen nochmal nach. Vielleicht kann dir ja auch jemand anderes helfen.

    Tschau Gartenzwerg



  • ja, gut, kann gut möglich sein, aber wo steht sowas denn immer?
    Das ist ja wie schon gesagt nicht das einzige programm mit dem problem.
    Nehmen wir zum beispiel mal die id3lib!
    Ich kompiliere erstmal folgendes prog mit gcc id3.cpp -o id3

    #include <id3/tag.h>
    
    int main()
    {
    	ID3_Tag myTag("song.mp3");
    	return 0;
    }
    

    daraufhin zeigt er mir folgenden fehler an:

    : undefined reference to `ID3_Tag::~ID3_Tag [in-charge]()'
    /tmp/ccRc9NB4.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld returned 1 exit status
    

    So, wenn ich den gleichen code nochmal mit gcc id3.cpp -o id3 -lid3 kompiliere, spuckt er mir folgende fehlermeldung aus:

    /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libid3.so: undefined reference to `uncompress'
    /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libid3.so: undefined reference to `compress'
    collect2: ld returned 1 exit status
    

    Das kann ja wohl kaum im sinne des Erfinders sein, oder?

    Danke.



  • hast du auch die Umgebungs Variablen so gesetzt, wie sie in den Installationsanweisungen stehen?



  • ja, hab ich, obwohl ich kein libs zu xerces-c gefunden habe!
    Mittlerweile habe ich auch den Artikel vom XML-Magazin wieder gefunden, wo das alles drin steht, wie man XML-dateien mit C++ bearbeitet und verarbeitet! http://www.doctronic.de/knowhow/vortraege/DE_1.2002_91_94_monitor.pdf


Anmelden zum Antworten