Russian Qt Forum

Qt => Базы данных => Тема начата: cresta от Март 04, 2009, 17:00



Название: Конфликт хидеров при компиляции плагина mysql
Отправлено: cresta от Март 04, 2009, 17:00
При компиляции плагина mysql конфликтуют хидер mysql_com.h и виндовый winsock.h
В обоих хидерах есть тип данных SOCKET, но определены они по разному.

c:\qt\4.4.3\src\plugins\sqldrivers\mysql\mysql_headers\mysql_com.h(175) : error C2371: SOCKET: переопределение; различные базовые типы

C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(54): см. объявление 'SOCKET'

Для чего тут винсок выскочил? Может его как-то отключить? Мне кажется для компиляции плагина он абсолютно не нужен.
Есть ли какие ключи для nmake, которые позволяют отключать ту или иную либу из процесса компиляции?


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: ритт от Март 04, 2009, 17:49
c:\qt\4.4.3\src\plugins\sqldrivers\mysql\mysql_headers ?


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: cresta от Март 04, 2009, 19:29
Это я туда положил хидеры.
Сами они нормальные, я ими не раз пользовался. В частности делал класс-обертку для mysql



Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: ритт от Март 04, 2009, 20:14
а кутэ собирается с ключём -direct3d?


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: cresta от Март 04, 2009, 22:21
нет.
Никаких ключей не задано в явном виде, при конфигурировании видно в выводе, что поддержка direct3d не включена


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: ритт от Март 04, 2009, 22:36
мб тогда убрать Microsoft SDKs из путей?


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: cresta от Март 05, 2009, 11:40
в путях sdk не оговаривается.

скачал новый пакет mysql, с ним плагин собрался. Правда непонятно, почему плагин называется qsqlmysqld4.lib?
версия mysql была скачана пятая, а не четвертая. Это вообще принципиально или нет?



Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: pastor от Март 05, 2009, 11:42
скачал новый пакет mysql, с ним плагин собрался. Правда непонятно, почему плагин называется qsqlmysqld4.lib?
версия mysql была скачана пятая, а не четвертая. Это вообще принципиально или нет?

4 - это мажорная версия Qt и это не принципиально


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: cresta от Март 05, 2009, 11:53
Все понял, спасибо


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: cresta от Март 05, 2009, 16:39
Это какое-то болото :(

Вроде все было нормально, но не работал у меня qDebug.
Почитал форум и по советам решил пересобрать qt с ключом -debug-and-release

Вот все параметры конфигуратора:

configure -debug-and-release -static -no-phonon -no-phonon-backend -no-qt3support -no-opengl -arch windows -platform win32-msvc2008

Собралось, затем начал опять плагин mysql компилировать. Компиляция закончилась без ошибок.
Пошел проверять проект, который работал до пересборки qt - не компилируется: не находит файл c:\Qt\4.4.3\lib\QtSql4.lib
Файла qsqlmysqld4.lib который был до пересборки, тоже нет.
И qt не работает, и два часа компиляции коту под хвост :(

Что за ерунда такая? В чем проблема?



Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: lit-uriy от Март 05, 2009, 17:47
перед новой конфигурацией, делал команду:
make confclean
 или нет??


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: lit-uriy от Март 05, 2009, 17:49
да изачем тебе в статике отладка, держи две сборки Qt, одна - static/release, вторая - shared/dabug_and_release


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: cresta от Март 05, 2009, 18:26
nmake confclean делал
после этого опять сконфигурировал и собрал с такими ключами:

>configure -debug -no-phonon -no-phonon-backend -no-opengl -no-sql-sqlite -arch windows -platform win32-msvc2008
>nmake sub-src

после опять собрал плагин mysql

Теперь ситуация такая: мой тестовый проект из студии не собирается. По прежнему пишет, что отсутствует файл c:\Qt\4.4.3\lib\QtSql4.lib

Из командной строки собирается только debug-версия, но qDebug по-прежнему не работает. Вывода от qDebug в консоль нет. Release не собирается вообще.

Запутался уже в этих ключах :(

Как сделать, чтобы qDebug работал? Пусть будет shared, ничего страшного.

Что значит две сборки? Создавать две директории с сорцами qt и два раза компилировать либы? И проекты создавать в двух экземплярах (дебаг/релиз)? И для каждого вида проектов устанавливать свои переменные среды при компиляции? Или что?




Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: lit-uriy от Март 05, 2009, 20:13
>>Что значит две сборки? Создавать две директории с сорцами qt и два раза компилировать либы? И проекты создавать в двух экземплярах (дебаг/релиз)? И для каждого вида проектов устанавливать свои переменные среды при компиляции? Или что?

Да


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: cresta от Март 05, 2009, 20:33
Охренеть, это ж сколько места надо будет на винте? :o
Дебаг занимает 14 Гигов
Релиз около 5 Гб.

Ну ладно, бог с ним, пусть будет 19 гигов, а как сделать так, чтобы qDebug работал? Ключ -debug никак не помогает :(


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: lit-uriy от Март 05, 2009, 22:14
>>Дебаг занимает 14 Гигов
У меня Qt4.4.3, самособранная занимает 1.4 ГиБ

>>а как сделать так, чтобы qDebug работал? Ключ -debug
а что значит не работает?

Такой пример:
test.pro
Код:
TEMPLATE = app
TARGET = test
# Input
SOURCES += main.cpp
# Config
CONFIG     += console
# Path
DESTDIR     = ./build
OBJECTS_DIR = ./build/obj
UI_DIR      = ./build/uic
MOC_DIR     = ./build/moc
RCC_DIR = ./build/rcc
main.cpp
Код:
#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
qDebug() << "test";
    return app.exec();
}
как себя ведет?


Название: Re: Конфликт хидеров при компиляции плагина mysql
Отправлено: cresta от Март 06, 2009, 08:27
Отследил, в чем дело: если пользоваться только qmake для построения и компиляции проекта, то qDebug работает. Вывод информации есть. А вот если сделать
qmake -tp vc -o test.vcproj test.pro
и полученный файл test.vcproj открыть в студии и далее выполнять сборку в студии, то вывод от qDebug присутствует только в окошке вывода самой студии. Видимо что-то студия делает так, чтобы перенаправить вывод из консоли к себе, в свое окошко "Вывод".
Вот только смотреть в студийное окошко неудобно: само окно маленькое, и вывод от qDebug перемежается выводом различной служебной информации. И пока полностью не пересоберешь проект, вывод qDebug в консоли не будет.

Получается, либо qDebug в консоли, и теряются удобства студии (компиляция, точки останова, просмотр переменных...),
либо qDebug выводит в окно студии, но вывод читать неудобно.

Как скрестить коня и трепетную лань ?