.zip entpacken



  • danke für den tip, ich werds mir ma anschauen!

    allerdings denke ich, dass es momentan nur am linken liegt, denn in /usr/include/ liegt einerseits eine libz.so und eine libz.a

    wenn ich nun in meinem eclipse bei der -l option des linkers "z" mitgebe, dann wird wohl die libz.so statt der libz.a integriert 😞

    also muss ich nur noch wissen, wie man ne .a datei verlinkt...

    gruß davey



  • hey Tommi,

    da warste schneller, vielen dank für diese ausführliche erklärung, da gehen einem lichter auf...

    (natürlich meinte ich /usr/lib/ hab ich ja vor n paar tagen hier gelernt 😉

    nur weiß ich noch immer nich wie ich das in meinem eclipse hinbekomme, im minizipprojekt hab ich im makefile auf meine /usr/lib/libz.a verwiesen und es ging,.

    kann ja net so schwer sein das im eclipse hinzubekommen, allerdings werden dort die makefiles automatisch erzeugt, sodass man da leider nich einfach was reinschreiben kann 😞

    mfg davey



  • davey schrieb:

    wenn ich nun in meinem eclipse bei der -l option des linkers "z" mitgebe, dann wird wohl die libz.so statt der libz.a integriert 😞

    Warum willst Du denn die statische Version verwenden? Nimm die dynamische.

    also muss ich nur noch wissen, wie man ne .a datei verlinkt...

    Kommt auf Deinen Linker an, beim ld zB mit der Option -static.



  • hi,

    also um es präzise zu formulieren möchte ich den code von miniunzip (später mal bis aufs nötigste abgespeckt) in mein c++projekt einbinden.

    im makefile von miniunzip wird die statische zlib.a beim kompilieren respektive linken(?) hinzugefügt, (deshalb wollt ich die statische)
    nun gut das konnte ich bei den kompileroptionen mit angeben, allerdings bin ich nicht befähigt die "main" umzuschreiben und so in mein projekt einzubinden, dass alle referenzen stimmen 😞

    als workaround rufe ich nun doch das programm mit "system("./miniunzip XYZ.zip")" auf, was ich ja eigentlich nicht wollte

    gruß davey



  • Du musst doch nur die Funktionen aus dem Header verwenden und zur libz.so linken, was davon schaffst Du nicht?



  • hi nman,

    das miniunzip ist ein eigenständiges c-programm, im make file steht folgendes:

    UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
    .c.o:
    	$(CC) -c $(CFLAGS) $*.c
    all: miniunz 
    miniunz:  $(UNZ_OBJS)
    	$(CC) $(CFLAGS) -o $@ $(UNZ_OBJS)
    

    die haben da noch ne eigene libz.a, daher wollte ich krampfhaft die statische lib haben...

    ich wollte nun lediglich die main umbenennen, um sie aus meinem c++programm aufrufen zu können und das bekomme ich einfach nicht hin,
    in "miniunz.c" ist die main, die hab ich ma zipnow() genannt, weiterhin hab ich die files ioapi.c/.h und die unzip.c/.h in meinem projekt... die miniunz.c includiere ich in meiner main (ob das funzt...?), nun wird zwar die funktion zipnow() ohne probleme gefunden, jedoch ruft diese funktion zb die funktion "unzOpen(zipfilename)" aus unzip.c/.h aufgerufen, und da zieh ich beim linken immer folgende error meldung:

    ./main.o: In function `zipnow(int, char*)':../miniunz.c:543: undefined reference to `unzOpen'
    :../miniunz.c:551: undefined reference to `unzOpen'
    

    eigentlich wollte ich ja sowas in der art machen, was tntnet-tommi vorgeschlagen hat, aber durch seinen code steig ich erstma so gar nicht durch, mit den tnt-namespaces... da hab ich hart keinen plan, habs zwar ma kurzzeitig versucht, wollte aber dann doch lieber den anderen weg verfolgen

    gruß davey



  • Hi,

    wenn Dir das ohne Namespaces lieber ist und die Fehlerbehandlung habe ich auch weg gelassen. Einfacher geht es dann nicht mehr:

    #include <tnt/unzipfile.h> 
    #include <iostream>
    using namespace std;
    using namespace tnt;
    int main() 
    { 
      unzipFile f("datei.zip");           // öffne ZIP-Datei 
      unzipFileStream d(f, "datei.txt");  // öffne Datei innerhalb der ZIP-Datei 
      cout << d.rdbuf() << endl;     // gebe Datei auf cout aus 
    }
    

    Tommi



  • davey schrieb:

    das miniunzip ist ein eigenständiges c-programm, im make file steht folgendes

    Und es gibt eine zip.h bzw. unzip.h, die verwendest Du.



  • hi,

    @nman
    ja, das is ja das komische, die unzip.h wird in der miniunzip.c includiert, wodurch ja die funktionen nach meinem verständnis bereitstehen sollten...

    @tnt-tommi:
    ich werde es jetzt nochmal probieren!
    werde mir deine unzipfile.h anguggen, in mein projekt integrieren, wenn du meinst dass das so easy is, kann das ja net so schwer sein, oder ich bin einfach zu dumm 😞 *niemals aufgib*
    stelle es mir so vor,dass ich deine unzpfile.h und deren referenzierte files in mein projekt integriere und dann nach deinem code aufrufen, ma gugen was passiert 🙂
    eigentlich meinte ich auch die namespaces in deiner unzipfile.h 😉

    gruß davey

    p.s. danke für euren support 👍



  • davey schrieb:

    ja, das is ja das komische, die unzip.h wird in der miniunzip.c includiert, wodurch ja die funktionen nach meinem verständnis bereitstehen sollten...

    Ja, in der miniunzip.c. Die kannst Du aber nicht includen, die zeigt Dir nur, wie Du die Funktionen aus unzip.h verwenden sollst.


Anmelden zum Antworten