Biblioteka do dekompresowania archiwów

0

Witam,
Muszę zdekompresować plik *.odt i wyciągnąć z niego plik content.xml. Potrzebuję jak najprostszej w obsłudze i jak najmniejszej biblioteki, która pozwoliłaby mi tego dokonać.
Próbowałem użyć QuaZip, ale nie jestem w stanie dodać jej do projektu (non stop jakieś niezrozumiałe błędy)...
Jakieś propozycje?

0

Widzę, że zainteresowanie wątkiem niezbyt duże ;D No cóż, użyłem biblioteki
http://www.chilkatsoft.com/downloads_CPP.asp
Ale mam problemy z linkowaniem - dodałem ją za pomocą menu kontekstowego "Dodaj bibliotekę". Mogę includować pliki z tej biblioteki, ale kiedy tylko spróbuję np. utworzyć jakiś obiekt klasy z biblioteki to dostaję błąd:
undefined reference to `CkZip::CkZip()'
Wie ktoś jak się tego pozbyć?

[EDIT]: Na końcu błędów zawsze jest jeszcze jeden:
error: ld returned 1 exit status
Kiedy go kliknę, pod spodem na czerwono pojawia się tekst:
Brak pliku: collect2.exe

0

Zgodnie z tym https://en.wikipedia.org/wiki/OpenDocument_technical_specification#Format_internals to to jest ZIP w formacie takim samym jak JAR. Poszukaj bibliotek do tego (proponuję zacząć od gzip i zlib).

0

Spróbowałem użyć biblioteki ZipLib. Zawiera na plik "ZipFile.h" z deklaracją fukcji ZipFile::ExtractFile(...). Chciałbym jej użyć w programie nie dołączając wszystkich plików biblioteki, a jedynie ZipFile.h. Definicja funkcji ExtractFile znajduje się w ZipFile.cpp. Wrzuciłem sobie wszystkie pliki biblioteki do katalogu z programem i wklepałem:

#include "ZipLib/ZipFile.h"

Niestety, kiedy chcę użyć funkcji ExtractFile, dostaję błąd:
undefined reference to ZipFile::ExtractFile(..)

2

Nie linkujesz biblioteki

0

Tak, korzystam z Qt Creatora. PrintScreeny jak linkuję krok po kroku w załącznikach. Na koniec jeszcze zmieniam w warunkach w pliku .pro wszystkie win32" na win64", bo mam komputer 64-bitowy (ta operacja nic nie zmienia, błędy jak przedtem były tak są). To tyle. Potem includuję np. tak:

#include "ZipFile.h"
0

Oto, co jest wrzucane do pliku .pro po dołączeniu biblioteki:

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/ZipLib/ -lZipLib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/ZipLib/ -lZipLibd

INCLUDEPATH += $$PWD/ZipLib
DEPENDPATH += $$PWD/ZipLib

win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/ZipLib/libZipLib.a // <- nie mam pliku .a, a mimo to są budowane takie instrukcje... zamieniam rozszerzenia
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/ZipLib/libZipLibd.a // na .lib, żeby cokolwiek zadziałało. 
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/ZipLib/ZipLib.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/ZipLib/ZipLibd.lib
0

To chyba jest problem tej biblioteki... pokazuje undefined reference do funkcji, ale jednocześnie traktuje pliki biblioteki jako zlinkowane z projektem (tzn. np wyświetla warningi dotyczące tych plików).

0

Jak korzystasz z Qt to może spróbuj użyć qUncompress: http://qt-project.org/doc/qt-4.8/qbytearray.html#qUncompress

0

Znowu spróbowałem zlinkować QuaZip'a. Nie ma błędów kompilacji, ale program "nieoczekiwanie kończy pracę" od razu po uruchomieniu. Debugger wywala błąd:
During Startup program exited with code 0xc0000135
Googlowałem, dowiedziałem się, że powodem błędu może być brak pliku *.dll biblioteki. Okazało się, że rzeczywiście takiego nie mam - pobrałem go oddzielnie i wrzuciłem do folderów z biblioteką, niestety to nie rozwiązało problemu.

0

Dobra, udało mi się wreszcie zlinkować QuaZip'a. Rozwiązanie bliżej nieokreślone, po prostu zadziałało ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1