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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: А как собрать qt приложение с quazip static?  (Прочитано 9519 раз)
Radmir
Гость
« : Май 20, 2014, 16:26 »

Hi всем,

может все просто, но чего-то у меня не получается, quazip цепляется как отдельная dll, а вот static не цепляется, программа все равно требует quazip.dll.
Если кто в этом преуспел, то поделитесь опытом...

Qt 4.8.2, Qt Creator 2.5.1, msvc 2010, WinXP
Qt 4.8.4, Qt Creator 2.7.1, g++, Ubuntu 13.10
С уважением,
Радмир
Записан
OKTA
Гость
« Ответ #1 : Май 20, 2014, 16:33 »

как здесь делал? http://quazip.sourceforge.net/
Записан
Radmir
Гость
« Ответ #2 : Май 20, 2014, 16:35 »

как здесь делал? http://quazip.sourceforge.net/
да вроде...
Записан
OKTA
Гость
« Ответ #3 : Май 20, 2014, 17:04 »

Если он просит dll, видимо ты ему суешь не тот файл .a - проверь..
Записан
Radmir
Гость
« Ответ #4 : Май 20, 2014, 17:46 »

Если он просит dll, видимо ты ему суешь не тот файл .a - проверь..
В том то и дело, раз просит dll, значит сборка не статическая...
Записан
OKTA
Гость
« Ответ #5 : Май 20, 2014, 17:49 »

Ну, значит не по мануалу делал  Подмигивающий
Записан
Radmir
Гость
« Ответ #6 : Май 20, 2014, 18:41 »

Ну, значит не по мануалу делал  Подмигивающий
Ну тогда просто распиши как это вы сделали:
-    Just copy appropriate source files to your project and use them,
- but you need to define QUAZIP_STATIC before including any QuaZIP headers (best done as a compiler option). This will save you from possible side effects of importing/exporting QuaZIP symbols.
-   Compile it as a static library using CONFIG += staticlib qmake option. QUAZIP_STATIC is defined automatically by qmake in this case.

Не напрягайтесь если не делали, а так, просто теоритизируем...
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Май 20, 2014, 19:08 »

ну, первый пункт исключает всякие dll зависимости. Второй тоже, потому что в результате компиляции quazip получается статическая библиотека (проверил на винде). Твой проект просто неправильно настроен, поэтому откуда-то цепляет dll.
Записан
Radmir
Гость
« Ответ #8 : Май 21, 2014, 10:51 »

ну, первый пункт исключает всякие dll зависимости. Второй тоже, потому что в результате компиляции quazip получается статическая библиотека (проверил на винде). Твой проект просто неправильно настроен, поэтому откуда-то цепляет dll.
До конечно, но просто копирование всех файлов приводит к несобираемоу проекту, а инклюд файлов приводит к ошибкам компиляции, которых нет при сборке родного проекта...
Как понимает, я хочу увидеть, как это сделал тот, кто делал..., если делал, а общие советы...
Радмир
Записан
Figaro
Гость
« Ответ #9 : Май 21, 2014, 10:57 »

Сложно проверить exe'ник дамбином или валкером? Посмотрите зависимости, если хотите статиком, значит в зависимостях не будет dll'ки... Млин детский сад....
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #10 : Май 21, 2014, 11:38 »

До конечно, но просто копирование всех файлов приводит к несобираемоу проекту, а инклюд файлов приводит к ошибкам компиляции, которых нет при сборке родного проекта...

У меня всё работает. KUbuntu 13.04. Проект состоит из main.cpp и файлов-исходников Скопированных из архива quazip. Единственное что -lz нужно добавить в LIBS, т.к. quazip использует zlib.

Код
C++ (Qt)
#include <QCoreApplication>
#include <QDebug>
 
#include "quazip.h"
#include "quazipfile.h"
 
int main(int argc, char *argv[])
{
   QCoreApplication app(argc, argv);
 
   QuaZip zip("zipFile.zip");
   zip.open(QuaZip::mdUnzip);
 
   QuaZipFile file(&zip);
 
   for(bool f = zip.goToFirstFile(); f; f = zip.goToNextFile())
   {
       qDebug() << file.getActualFileName();
   }
 
   return 0;
}
« Последнее редактирование: Май 21, 2014, 11:42 от Alex Custov » Записан
Radmir
Гость
« Ответ #11 : Май 22, 2014, 09:52 »

До конечно, но просто копирование всех файлов приводит к несобираемоу проекту, а инклюд файлов приводит к ошибкам компиляции, которых нет при сборке родного проекта...

У меня всё работает. KUbuntu 13.04. Проект состоит из main.cpp и файлов-исходников Скопированных из архива quazip. Единственное что -lz нужно добавить в LIBS, т.к. quazip использует zlib.

Код
C++ (Qt)
#include <QCoreApplication>
#include <QDebug>
 
#include "quazip.h"
#include "quazipfile.h"
 
int main(int argc, char *argv[])
{
   QCoreApplication app(argc, argv);
 
   QuaZip zip("zipFile.zip");
   zip.open(QuaZip::mdUnzip);
 
   QuaZipFile file(&zip);
 
   for(bool f = zip.goToFirstFile(); f; f = zip.goToNextFile())
   {
       qDebug() << file.getActualFileName();
   }
 
   return 0;
}

Как на странно, но у меня на Ubuntu 13.10 тоже получилось, а на винде не выходит.
Я и раньше подозревал, что для включения quazip статически, ей тоже нужны свои dll и тоже статические. Похоже, что этой опции в проекте Libs += -lz и не хватало.

Но на Ubuntu у меня появилась zDll.lib, не она ли является причиной?

На винде ее нет, и -lz она не находит...
Все равно спасибо.
Радмир
Записан
Radmir
Гость
« Ответ #12 : Май 22, 2014, 10:04 »

Ну, значит не по мануалу делал  Подмигивающий
Ну тогда просто распиши как это вы сделали:
-    Just copy appropriate source files to your project and use them,
- but you need to define QUAZIP_STATIC before including any QuaZIP headers (best done as a compiler option). This will save you from possible side effects of importing/exporting QuaZIP symbols.
-   Compile it as a static library using CONFIG += staticlib qmake option. QUAZIP_STATIC is defined automatically by qmake in this case.

Не напрягайтесь если не делали, а так, просто теоритизируем...

Поскольку ответа нет, значит или никто не знает, или я чего-то не догоняю... Ну тогда поясню свои вопросы:

-    Just copy appropriate source files to your project and use them,
     Нужно действительно скопировать все *.h и dct *.cpp файлы, или достаточно просто присодинить их к проекту (Qt Creator позволяет это)
- but you need to define QUAZIP_STATIC before including any QuaZIP headers
   нужно в *.h файле вашего проекта вставить:

#define QUAZIP_STATIC
#include "quazip.h"

(best done as a compiler option).
- а это как? 
    Это в нашем проекте?
    где в команде QtCreatora
qmake.exe C:\Qt\MyQt4Projects\Rednote\Rednote.pro -r -spec win32-msvc2010 "CONFIG+=declarative_debug"
This will save you from possible side effects of importing/exporting QuaZIP symbols.
-   Compile it as a static library using CONFIG += staticlib qmake option. QUAZIP_STATIC is defined automatically by qmake in this case.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #13 : Май 22, 2014, 11:40 »

Я и раньше подозревал, что для включения quazip статически, ей тоже нужны свои dll и тоже статические.

Статическая dll - это оксюморон. Как ручная АКПП. Разберись в терминах и азах компиляции. Без этого никуда, а ты уже лезешь в дебри.

Но на Ubuntu у меня появилась zDll.lib, не она ли является причиной?

Не знаю что такое zDll.lib и откуда она взялась на Ubuntu.

Нужно действительно скопировать все *.h и dct *.cpp файлы, или достаточно просто присодинить их к проекту (Qt Creator позволяет это)

Если просто присоединишь из какого-то другого каталога, то придётся ещё и прописывать пути поиска инклудов. Поэтому их нужно скопировать в каталог с проектом и присоединить к проекту.

На винде ее нет, и -lz она не находит...

По той банальной причине что zlib на винде не установлена и её нужно поставить вместе с заголовочными файлами для используемого компилятора.

(best done as a compiler option).
- а это как?

"DEFINES += QUAZIP_STATIC" в pro файле.

Это в нашем проекте?

Естественно в нашем, в каком же ещё??

P.S. Я вообще в шоке что приходится объяснять такие азы. Изучи сперва процесс компиляции, qmake и его флаги, и только потом уже занимайся всем остальным. Иначе твои хождения на форум будут бесконечными.
Записан
Radmir
Гость
« Ответ #14 : Май 29, 2014, 07:23 »

Попробую сформулировать, что получилось, сначала с советами последнего доброжелателя:

Я и раньше подозревал, что для включения quazip статически, ей тоже нужны свои dll и тоже статические.

Статическая dll - это оксюморон. Как ручная АКПП. Разберись в терминах и азах компиляции. Без этого никуда, а ты уже лезешь в дебри.
Не знаю, что такое окзюморок, а без этого, пытаться разобраться в терминах компиляции вообще отстой!

Но на Ubuntu у меня появилась zDll.lib, не она ли является причиной?

Не знаю что такое zDll.lib и откуда она взялась на Ubuntu.

Согласен, эта длл попала от предущих попыток использовать zip/unzip, в чистом виде она не нужна

Нужно действительно скопировать все *.h и dct *.cpp файлы, или достаточно просто присодинить их к проекту (Qt Creator позволяет это)

Если просто присоединишь из какого-то другого каталога, то придётся ещё и прописывать пути поиска инклудов. Поэтому их нужно скопировать в каталог с проектом и присоединить к проекту.

Нет, потому что Qt Creator все за вас делает: присоединяет файлы к проекту и прописывает инклуды

На винде ее нет, и -lz она не находит...

По той банальной причине что zlib на винде не установлена и её нужно поставить вместе с заголовочными файлами для используемого компилятора.

Просто на винде нужна zlib, которой нет в стандартной поставке (она нужна вместе с *.h, *.cpp файлами, но она есть в Qt в каталоге $QTDIR/src/3rdparty/zlib...

(best done as a compiler option).
- а это как?

"DEFINES += QUAZIP_STATIC" в pro файле.

Это в нашем проекте?

Естественно в нашем, в каком же ещё??

Тоже без объяснения где и когда, смотри следующие пояснения

P.S. Я вообще в шоке что приходится объяснять такие азы. Изучи сперва процесс компиляции, qmake и его флаги, и только потом уже занимайся всем остальным. Иначе твои хождения на форум будут бесконечными.
Ну а это вооще лирика, просто перечень пустых советов, можете сколько угодно зубрить теорию, но хорошо плавать в реальности. Насчет форума, абсолютная правда, как говорил Норберт Винер, легче самому создать новую теорию, чем получить нужную консультацию. Со времени развала ФИДО такое происходит со всеми форумами...
Далее моя теория:

Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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