gzstream in C++ Projekt einbinden



  • Hallo!

    Ich möchte in einem C++ Projekt (erstellt und Linux mit Netbeans 6.5) gzstream nutzen um gepackte Dateien auslesen zu können. Allerdings gelingt es mir nicht, die entsprechende Dateien dafür einzubinden. Die Erläuterung auf der Entwicklerseite bringt mich auch nicht weiter, bzw. sagt mir nichts. Diese wäre:

    Either compile gzstream.C by hand, place it in some library, and move gzstream.h into the include search path of your compiler. Or use the provided Makefile, adapt its variables, and follow the remarks in the Makefile. Two test programs are provided, test_gzip.C and test_gunzip.C. The Makefile contains a rule that performs a small test with these programs.

    Kann mir da jemand weiterhelfen?
    Danke euch! 🙂
    mfg

    Jojo



  • Jojojoxx schrieb:

    Allerdings gelingt es mir nicht, die entsprechende Dateien dafür einzubinden.

    Das ist sehr ungenau. Fällt in etwa in die Kategorie "das geht nicht!". -> Mehr Infos bitte, was genau gelingt dir daran nicht (Fehlermeldungen)?

    Die Erläuterung auf der Entwicklerseite bringt mich auch nicht weiter, bzw. sagt mir nichts.

    Ist genauso ungenau. Verstehst du den Text nicht? Hast du die Möglichkeiten die dort aufgezeigt werden probiert und hast Fehlermeldungen bekommen oder weißt nicht wie du an einer bestimmten Stelle weiter kommst? -> Noch mehr Infos bitte.



  • Leider kann ich nicht wirklich viele Informationen geben, da ich wirklich fundamental nicht weiterkomme. Die Anleitung

    Either compile gzstream.C by hand, place it in some library, and move gzstream.h into the include search path of your compiler.
    

    bringt mich nicht wirklich weiter, wie kompiliere ich das? mit "make", oder mit gcc? Und was bedeutet "place it in some library", wo liegt die?? Und wie füge ich die gzstream.h in den Suchpfad des Compilers hinzu?



  • Jojojoxx schrieb:

    Leider kann ich nicht wirklich viele Informationen geben

    Die Fehlermeldung des Compilers kannst du immer angeben, egal wie kurz sie ist. Wenns keine Fehlermeldung gibt, kann das zwei gründe haben:
    a) Der Compiler hat keine Fehlermeldung ausgegeben, also gein Grund zu Fragen.
    b) Du hast nicht compiliert - also auch noch kein Grund zu Fragen.

    bringt mich nicht wirklich weiter, wie kompiliere ich das? mit "make", oder mit gcc?

    "By hand" compilieren heißt zu Fuß, ohne Hilfsmittel, also nur mit einem Compiler, also gcc in deinem Fall. make wäre die Option mit dem Makefile, die weiter hinten in dem Text beschrieben stand.

    Und was bedeutet "place it in some library", wo liegt die??

    Die müsstest du selber anlegen, wenn du für deine häufiger gebracuhten Sachen noch keine hast. Es gibt statische und dynamische Libs, wie man die erstellt und mit linkt wird dir die Doku deines Compilers sagen können, was Libraries sind und was der Unterschied zwischen statischen und dynamischen Libs ist kann dir Google/Wikipedian sagen.

    Und wie füge ich die gzstream.h in den Suchpfad des Compilers hinzu?

    Wird dir die Doku deines Compilers bestimmt erklären können.



  • Aus welchem Grund kann man die gzstream.c und .h Datei nicht einfach mit ins Verzeichnis kopieren und per Include einbinden?



  • weil man .c-Dateien nicht per #include einbinden kann sondern sie als eigene Übersetzungseinheit compilieren muss.



  • Achso!
    Also ich habe die gzstream.C jetzt kompiliert und eine gzstream.o erhalten.
    Anschließend habe ich per

    ld -shared gzstream.o -o gzlib.so
    

    eine Bibliothek daraus erstellt, zumindest hoffe ich dass das eine (korrekte) ist.
    Ich habe in Netbeans in den Projektoptionen unter Linker die gzlib.so als Library hinzugefügt, aber ich erhalte den Fehler

    Input.cpp:2:22: Warnung: gzstream.h: No such file or directory

    In dieser zeile steht "#include <gzstream.h>".
    Wie bringe ich Netbeans nun bei diese zu nutzen?



  • Jojojoxx schrieb:

    Input.cpp:2:22: Warnung: gzstream.h: No such file or directory

    In dieser zeile steht "#include <gzstream.h>".
    Wie bringe ich Netbeans nun bei diese zu nutzen?

    Das ist dann der Punkt mit dem Suchpfad des Compilers. Gibts bestimmt auch in den Projektoptionen deiner IDE (beim gcc ists meine ich -I/pfad/zum/header/oder/sowas/)
    Schau außerdem mal nach dem Unterschied zwischen "gzstream.h" und <gzstream.h> in der Doku deines Compilers.



  • Wenn ich die gzstream.h mit

    #include "gzstream.h"
    

    einbinde, dann scheint der Compiler die Datei auch zu finden. Doch dann erhalte ich einen anderen Fehler, der mir nichts sagt, nämlich

    /usr/bin/ld: translator: hidden symbol `__dso_handle' in /usr/lib/gcc/i486-linux-gnu/4.3.3/crtbegin.o is referenced by DSO
    /usr/bin/ld: final link failed: Nonrepresentable section on output
    collect2: ld gab 1 als Ende-Status zurück



  • Fehlermeldungen die einem nichts sagen sollte man einfach erstmal so wie sie sind in google eingeben - meistens bist du nicht der erste der danach sucht
    Bei der Suche nach

    hidden symbol is referenced by dso
    

    bin ich auf folgenden Thread gestoßen:
    http://sources.redhat.com/ml/binutils/2004-12/msg00032.html

    vielleicht hilft dir der weiter (follwoups beachten). Dort steht was von wegen "was built incorrectly". Schaut so aus als ob du beim Erstellen der lib was nicht mit reingelinkt hast was rein müsste.

    Ich selbst kenn den Fehler auch nicht, kann also auch nichts genaueres sagen. Hast dus evtl. mal mit dem makefile versucht? Bzw. das Makefile mal gelesen, da steht vermutlich auch mit drin, welche libs noch beim Erstellen in die gzlib.so mit gelinkt werden müssen.



  • Mhhhh...

    Also die 2. Möglichkeit mit Makefile habe ich mal versucht.
    Ich habe mit make alles kompiliert, und auch die gzstream.o erhalten.
    Was genau beudetet

    adapt its variables

    Und auch aus den "remarks" werde ich nicht schlau... 😕


Anmelden zum Antworten