Russian Qt Forum
Ноябрь 27, 2024, 02:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [решено] zlib  (Прочитано 8971 раз)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« : Март 20, 2010, 15:55 »

Коллеги, подскажите, как правильно в проекте использовать zlib (функции compress и uncompress) - включить эти h-файлы в проект или что?
И поясните, если zlib встроен в Qt, зачем так глубоко прятать zlib.h и zconf.h? Почему их нет в include?
« Последнее редактирование: Март 21, 2010, 14:13 от tramp_0 » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Март 20, 2010, 15:59 »

злиб не встроен в qt. Есть 2 варианта - либо qt юзает системный злиб (и тогда ты подключаешь свои хедеры из системы), либо юзает копию в 3rdParty. В этом случае предполагается что ты также будешь таскать с собой свой злиб
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #2 : Март 20, 2010, 16:18 »

Цитировать
юзает копию в 3rdParty. В этом случае предполагается что ты также будешь таскать с собой свой злиб
Там же исходники. Сама либа где? Я в проекте под SDK Wind подключаю хедер и все работает. Что-то не вкурю..

Цитировать
либо qt юзает системный злиб (и тогда ты подключаешь свои хедеры из системы)
Под Win имеется в виду mingw? Не нашел zlib.h нигде, кроме 3rdParty.

Давайте, переформулирую вопрос. В проекте SDK for Win хочу использовать упомянутые функции zlib. Что надо сделать (1, 2, 3...)?
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Март 20, 2010, 16:31 »

1) собрать злиб из сорцов в папке 3rdParty (уже собранного по ходу нет)
2) взять либу, взять хедер, положить куда-нибудь, где это будет видно программе (например прямо в папки qt), или задать INCLUDEPATH и LIBS
3) собрать программу

вариант к-ый юзают кутешники - они подключают сорцы прямо в проект (и настраивают инклюдпатх на папку в 3drParty) - по крайней мере так собирается жпег-плагин
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #4 : Март 20, 2010, 16:55 »

Спасибо.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #5 : Март 21, 2010, 12:29 »

Поковырялся в форумах, нашел еще один вариант использования zlib - через враппер qCompress(), qUncompress() модуля QtCore (описаны там же, где QByteArray). Для меня это даже удобнее - не надо возиться с выделением памяти под распакованные данные.
Только для совместимости с zlib (а входные данные для меня упакованы zlib, и я готовлю данные для нее же) после qCompress() и перед qUncompress() надо менять порядок следования первых четырех байт (начального блока) данных, содержащих ожидаемую длину распакованных данных, на противоположный.

Правда, я так и не нашел объяснения, почему zlib использует для этого блока порядок little-endian, а враппер - big-endian. Может, кто-нибудь знает?
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Akaiten
Гость
« Ответ #6 : Март 22, 2010, 09:47 »

злиб не встроен в qt. Есть 2 варианта - либо qt юзает системный злиб (и тогда ты подключаешь свои хедеры из системы), либо юзает копию в 3rdParty. В этом случае предполагается что ты также будешь таскать с собой свой злиб

по крайней мере под виндой zlib по умолчанию линкуется к QtCore4.dll и все его export-символы доступны, так что для использования zlib требуется только подключить .h файлы. Под маком, например, приходилось использовать -lz для линкера.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #7 : Март 22, 2010, 17:37 »

Цитировать
по крайней мере под виндой zlib по умолчанию линкуется к QtCore4.dll и все его export-символы доступны
Меня тоже это напрягало. Потом, когда почитал про qCompress, вопросы отпали - zlib, конечно, встроена в QtCore, а в документации разработчики не отразили сей факт, поскольку zlib не имеет отношения к Qt.
Правда, из-за этого использование zlib'овских compress и uncompress чревато - ничего не стоит тролям заменить zlib на что-нибудь другое совместимое.

Поэтому я остановился на qCompress/qUncompress. Надеюсь, что вот это не изменится  Подмигивающий:
Цитировать
Note: If you want to use this function to uncompress external data compressed using zlib, you first need to prepend four bytes to the byte array that contain the expected length (as an unsigned integer) of the uncompressed data encoded in big-endian order (most significant byte first)
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 22.