Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Пантер от Январь 19, 2012, 10:38



Название: [РЕШЕНО] QZipWriter отсутствует в QtGui
Отправлено: Пантер от Январь 19, 2012, 10:38
Собираю 4.8.0 и 4.7.4 с одинаковыми параметрами:
Код:
configure.exe -debug-and-release -opensource -shared -no-fast -exceptions -stl -qt-sql-sqlite -no-qt3support -platform win32-g++ -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-dsp -no-vcproj -plugin-manifests -qmake -no-phonon -no-phonon-backend -webkit -declarative -declarative-debug

В итоге, в QtGui4.dll от 4.7.4 отсутствует QZipWriter, а от 4.8.0 он присутствует. В чем косяк с версией 4.7.4?


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: LisandreL от Январь 19, 2012, 11:30
В 4.7.4 ?/include/QtGui/ не содержит приватных классов.
В 4.8.0 в ?/include/QtGui/private/ лежат заголовочники, не являющие частью Qt API.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: Пантер от Январь 19, 2012, 11:42
LisandreL, это чинится?


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: LisandreL от Январь 19, 2012, 12:03
Закидыванием qzipwriter_p.h в папку поекта, например.

Можно было бы даже вот такую конструкцию соорудить:
Код:
#if QT_VERSION_CHECK < 0x040800
    #include "qzipwriter_p.h"
#else
    #include #include <QtGui/private/qzipwriter_p.h>
#endif
Но QT_VERSION_CHECK всё ещё равно 0x0x040704 в 4.8.0.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: Пантер от Январь 19, 2012, 12:10
Не, тут другой косяк. Хидер-то я закинул. Проблема на этапе линковки - анрезолвед выдает.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: LisandreL от Январь 19, 2012, 13:21
Ну покажите подробности.
Кусок кода, ошибки линковки.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: Пантер от Январь 19, 2012, 13:26
Код:
Linking CXX executable tar2moscow.exe
CMakeFiles\tar2moscow.dir/objects.a(targetRepresentationMoscow.cpp.obj): In function `ZN17MoscowFormatSaver8saveDataERK7QStringRK10QByteArrayS5_':
C:/panter/program/Tar2Moscow/src/core/targetRepresentationMoscow.cpp:488: undefined reference to `QZipWriter::device() const'
C:/panter/program/Tar2Moscow/src/core/targetRepresentationMoscow.cpp:489: undefined reference to `QZipWriter::status() const'
C:/panter/program/Tar2Moscow/src/core/targetRepresentationMoscow.cpp:500: undefined reference to `QZipWriter::addFile(QString const&, QByteArray const&)'
C:/panter/program/Tar2Moscow/src/core/targetRepresentationMoscow.cpp:502: undefined reference to `QZipWriter::status() const'
C:/panter/program/Tar2Moscow/src/core/targetRepresentationMoscow.cpp:505: undefined reference to `QZipWriter::addFile(QString const&, QByteArray const&)'
C:/panter/program/Tar2Moscow/src/core/targetRepresentationMoscow.cpp:508: undefined reference to `QZipWriter::status() const'
C:/panter/program/Tar2Moscow/src/core/targetRepresentationMoscow.cpp:513: undefined reference to `QZipWriter::status() const'
CMakeFiles\tar2moscow.dir/objects.a(targetRepresentationMoscow.cpp.obj): In function `~ZipWriters':
C:/panter/program/Tar2Moscow/src/core//targetRepresentationMoscow.h:58: undefined reference to `QZipWriter::close()'
C:/panter/program/Tar2Moscow/src/core//targetRepresentationMoscow.h:59: undefined reference to `QZipWriter::~QZipWriter()'
CMakeFiles\tar2moscow.dir/objects.a(targetRepresentationMoscow.cpp.obj): In function `ZN17MoscowFormatSaver10ZipWriters12addZipWriterERK7QStringS1_':
C:/panter/program/Tar2Moscow/src/core//targetRepresentationMoscow.h:68: undefined reference to `QZipWriter::QZipWriter(QString const&, QFlags<QIODevice::OpenModeFlag>)'
C:/panter/program/Tar2Moscow/src/core//targetRepresentationMoscow.h:69: undefined reference to `QZipWriter::setCompressionPolicy(QZipWriter::CompressionPolicy)'
collect2: ld returned 1 exit status


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: ddrtn от Январь 19, 2012, 13:36
там замечательная строчка есть
Код:
#ifndef QT_NO_TEXTODFWRITER
QT_NO_TEXTODFWRITER - определен?


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: GreatSnake от Январь 19, 2012, 13:42
У тебя QZipWriter не экспортится, т.к. по умолчанию приватные классы не экспортятся.
Включи QT_BUILD_INTERNAL макрос при сборке QtGui либо напрямую вкомпиляй в свой код QZipWriter.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: Пантер от Январь 19, 2012, 14:49
GreatSnake, спасибо. -D QT_BUILD_INTERNAL к configure решил проблему.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: GreatSnake от Январь 19, 2012, 14:56
GreatSnake, спасибо. -D QT_BUILD_INTERNAL к configure решил проблему.
Я бы для портабельности всё-таки явно вкомпилил src/gui/text/qzip.cpp.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: Пантер от Январь 19, 2012, 15:06
GreatSnake, спасибо. -D QT_BUILD_INTERNAL к configure решил проблему.
Я бы для портабельности всё-таки явно вкомпилил src/gui/text/qzip.cpp.
У него там еще зависимость от qplatformdefs.h.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: GreatSnake от Январь 19, 2012, 15:13
У него там еще зависимость от qplatformdefs.h.
Ну и что? Ведь он публичный и лежит в mkspecs.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: Пантер от Январь 19, 2012, 15:19
У него там еще зависимость от qplatformdefs.h.
Ну и что? Ведь он публичный и лежит в mkspecs.
Там их очень много лежит.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: GreatSnake от Январь 19, 2012, 15:31
У него там еще зависимость от qplatformdefs.h.
Ну и что? Ведь он публичный и лежит в mkspecs.
Там их очень много лежит.
Нужный qplatformdefs.h лежит в %QTDIR%\mkspecs\default.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: Пантер от Январь 19, 2012, 15:34
Хм, учту.


Название: Re: QZipWriter отсутствует в QtGui
Отправлено: pastor от Январь 19, 2012, 16:24
У тебя QZipWriter не экспортится, т.к. по умолчанию приватные классы не экспортятся.
Включи QT_BUILD_INTERNAL макрос при сборке QtGui либо напрямую вкомпиляй в свой код QZipWriter.

Да, причина в этом. Я отправил мердж реквест по этому поводу и приняли его в 4.8.0