Biblioteka do dekompresowania archiwów

Odpowiedz Nowy wątek
2015-02-11 11:32
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?

Pozostało 580 znaków

2015-02-11 13:32
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

edytowany 1x, ostatnio: gogolon, 2015-02-11 14:10

Pozostało 580 znaków

2015-02-11 13:38
0

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

Bibliotekę jak widać znalazłem, ale nie potrafię jej poprawnie zlinkować z projektem ;| - gogolon 2015-02-11 13:39
Bez podania kompilatora nic nie zdziałamy. - hauleth 2015-02-11 13:43
MinGw 4.8 32 bit <- w sumie nie wiem, czemu korzystam z 32 bitowego na 64 bitowym komputerze... - gogolon 2015-02-11 13:44
Super. Googlowałem, ale biblioteka jest mało używana i ciężko coś znaleźć. Teraz zauważyłem, że pliki .h z tej biblioteki zawierają tylko deklaracje funkcji, ale nie ma odpowiadających im plików .cpp... lOl? - gogolon 2015-02-11 14:29

Pozostało 580 znaków

2015-02-11 16:56
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(..)

Pozostało 580 znaków

2015-02-11 19:30
2

Nie linkujesz biblioteki

Nie mogę tego zrobić, bo do tego jest potrzebny plik .a lub .lib, a takiego ta biblioteka nie zawiera. Są tam wszystkie potrzebne pliki + projekt VS (ja korzystam z Qt i to pod nim chcę korzystać z biblioteki). - gogolon 2015-02-11 20:15
Jeśli to jest ta biblioteka (https://bitbucket.org/wbenny/ziplib) to musisz ją najpierw skompilować... - satirev 2015-02-11 20:22
Skompilowałem za pomocą VS, pojawił się plik .lib, który potem zlinkowałem z projektem w Qt, ale wciąż te same błędy. - gogolon 2015-02-11 20:29
Nie spamuj. Skoro dostajesz undefined reference tzn. że nie linkujesz się z ta libą. Co to znaczy "korzystam z Qt"? Masz na myśli Qt Creator? Pokaż/opisz krok po kroku jak się linkujesz z tą biblioteką. - satirev 2015-02-11 22:02

Pozostało 580 znaków

2015-02-11 22:14
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"
  • 3.png (0,2 MB) - ściągnięć: 77
  • 4.png (0,06 MB) - ściągnięć: 56
  • 2.png (0,05 MB) - ściągnięć: 72
  • 1.png (0,05 MB) - ściągnięć: 63
edytowany 1x, ostatnio: gogolon, 2015-02-11 22:16
z tego co widzę to tę bibliotekę masz skompilowaną na x86 a nie 64 - satirev 2015-02-11 22:28
Kiedy zostawiam win32, są te same błędy co przy win64. - gogolon 2015-02-11 22:31
Użyj dowiązania statycznego zamiast dynamicznego - satirev 2015-02-11 22:36
Nic się nie zmienia - cały czas te same błędy. - gogolon 2015-02-11 23:23

Pozostało 580 znaków

2015-02-12 12:06
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
Wątek wciąż aktualny... - gogolon 2015-02-12 14:25

Pozostało 580 znaków

2015-02-12 14:46
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).

edytowany 1x, ostatnio: gogolon, 2015-02-12 14:46

Pozostało 580 znaków

2015-02-12 15:33
kq
0

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


Użycie tej funkcji jest dla mnie trochę niezrozumiałe.... Nie rozumiem jak mam wyciągnąć z archiwum plik o podanej nazwie. - gogolon 2015-02-12 15:36
Próbowałem. Wyświetla się błąd "Couldn't allocate enough memory for qUncompress()". - gogolon 2015-02-12 17:23

Pozostało 580 znaków

2015-02-12 18:31
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.

Mój problem jest nierozwiązywalny, źle coś wyjaśniłem czy co, że nikt tu nie zagląda? :C - gogolon 2015-02-12 21:49

Pozostało 580 znaków

2015-02-13 23:37

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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