Qt4 и MySQL в Linux, Mac OS X, Windows

Изображение пользователя derugu.

Почему Qt4?
Ах, Delphi, любил бы я тебя,
Когда бы не Паскаль, прокуратура, Windows...
(А.С. Пушкин)

Задумал я написать маленькую программу. Нормальную такую программку, с GUI и прочими имманентными атрибутами. Конечно, после многих лет юзания чужих VCL первое, что приходит на ум, это попробовать Лазарус. Но... Сами понимаете... Нельзя два раза войти в одну и ту же реку. Вспоминал с ностальгией и о Кайликсе (Kylics Kylix).
Первое требование - программа должна работать во всех операционных системах. Лично мне больше всего нравится Линукс и ОС Х, но людей, не разделяющих мои вкусы, гораздо больше. Поэтому далее последовал довольно длительный период выбора кроссплатформенной IDE, с поддержкой С++, то есть среды, с которой можно работать в Линуксе, а компилировать в Windows или Mac OS X. У меня нет цели сравнивать многочисленных достойных соперников, я лишь перечислю проверенных мною кандидатов:

CodeBlock и wxWidgets
Eclipse
Qt4
NetBeans

Испытывал я их именно в таком порядке, все IDE свободно можно скачать с сайтов разработчиков. Лично мне понравился Qt4, хотя NetBeans ничем не хуже и, может в дальнейшем, испробую и его.

Поддержка MySQL в Win, Lin, Mac для Qt4
Первое, что нужно было попробовать, это установить Qt4 в Линукс, Виндовз и Мак ОС Икс (хотел было написать Мак ОС Х, но рядом с русскими названиями это должно читаться, как Мак ОС Ха, или даже Хэ). Поставив на закачку офф-лайн инсталлятор для Виндовз c сайта qt4.nokia.com, приступил к установке Qt4 в АльтЛинукс с репозитория. Всё отлично заработало с первого раза, кроме подключения драйвера MySQL, который, впрочем, был быстро обнаружен и доустановлен. Закачка Qt4-инсталлятора в Виндовз тем временем завершилась, но установка выдавала ошибку. При установке Qt4 в Mac OS X была выбрана версия 4.7.3, как и для Виндовз, но установка с репозитория в Альте имела версию ниже, а именно 4.3. Репозиторий Fedora-14 предлагает довольно свежую версию Qt4 — 4.7.1, но найти для неё драйвер MySQL в репозитории не удалось. И не спрашивайте, зачем мне поддержка MySQL, секрет! Скажу только одно слово: Ружэль. Только тс-с-с! Никому!
Ох, как все запутано, скажете вы и будете правы! Но это теперь я знаю короткую дорогу и могу показать её Вам! И никаких репозиториев! Только с сайта разработчика можно для всех ОС скачать и установить совершенно одинаковую версию. Коротко, план такой:

1. Устанавливаем компилятор gcc в Linux и Mac OS X, в Windows компилятор MinGW устанавливается при инсталляции Qt4.
2. Качаем и устанавливаем последнюю версию Qt4 (на момент написания этой статьи 4.7.3) для трех ОС. Только не забудьте перед запуском установить атрибут файла "Исполняемый"
3. Качаем и устанавливаем исходники MySQL c сайта http://mysql.com
4. Компилируем библиотеку libqsqlmysql.

Компиляция библиотеки проста, но нужно быть аккуратным в указании путей к библиотекам. Например, общий вид команды в *nix такой:

cd /Qtdir/QtSources/4.7.3/src/plugins/sqldrivers/mysql
qmake -o Makefile "INCLUDEPATH+=/usr/local/mysql/include/" "LIBS+=-L/usr/local/mysql/lib -lmysqlclient_r" mysql.pro
make
make install

где Qtdir каталог установки Qt4,
/usr/local/mysql/include путь к каталогу /include исходников MySql
/usr/local/mysql/lib путь к каталогу /lib исходников MySql
Возможно нужно будет указать полный путь к qmake.

Установка в Линуксе
Например, в Altlinux путь к MySQL
/usr/local/mysql/include
/usr/local/mysql/lib
В Fedore 14 путь к MySQL оказался таким:
/usr/include/mysql
/usr/lib/mysql
и команда компиляции выглядит для Fedora 14 так

cd /home/filin/QtSDK/QtSources/4.7.3/src/plugins/sqldrivers/mysql
/home/filin/QtSDK/Desktop/Qt/473/gcc/bin/qmake -o Makefile "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.p
make
make install

В текущем каталоге появится файл библиотеки libqsqlmysql.so

Установка в Mac OS X
Mac OS X всё почти идентично, ну, почти:

cd /Users/derugu/QtSDK/QtSources/4.7.1/src/plugins/sqldrivers/mysql
/Users/derugu/QtSDK/Desktop/Qt/473/gcc/bin/qmake -o Makefile "INCLUDEPATH+=/usr/local/mysql/include/" "LIBS+=-L/usr/local/mysql/lib -lmysqlclient_r" mysql.pro
make release
make install
install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient_r.18.dylib libqsqlmysql.dylib

Команда make release создает в каталог release библиотеку. Далее необходимо учесть, что созданный плагин не верно подключает библиотеку mysqlclient. Это можно исправить, выполнив команду install_name_tool. Результатом этих действий и будет библиотека libqsqlmysql.dylib в каталоге /Users/derugu/QtSDK/QtSources/4.7.1/src/plugins/sqldrivers/mysql

Установка в Windows
Сразу скажу: все копии Windows у меня лицензионные! Установка Qt4 в Висту заклинила на 2-х процентах, а инсталляция в VirtualBox+ХР прошла хоть и медленно, но нормально. В МакОС и Линукс установка прошла гораздо быстрее, хотя возможно причиной замедленной инсталляции в Виндовз был антивирус DrWeb. В Виндовом Qt4 инсталлятор предложил пользовательскую (custom) установку, как и в других ОС, но раздела с исходниками не оказалось. Но это не беда, после установки Qt4 в меню запуска программы есть пункт обновления, где и можно доустановить из интернета исходники для драйвера MySQL.
Все команды знакомы, только поймал себя на мысли, что отвык от адресов в в Windows:

cd %QTDIR%\src\plugins\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MySQL\lib\opt\libmysql.lib" mysql.pro
make

Прикрепленный файлРазмер
qt4.jpg95.69 кб
Изображение пользователя Школяр.

Статья классная

и на самом деле можно пообсуждать, на чем писать межплатформенные приложения для декстопов.
Моя слабость - конечно NetBeans, но после того, как Oracle скушал Sun, я отношусь к нему с некоторой настороженностью.
Не совсем я понял, почему на Lazarus нельзя войти было в эту воду. Все отлично пишется и компилируется и там, и там.
И еще - не Kylics, а Kylix назывался незавершенный проект межплатформенной IDE от Borland. Скорблю по сей день :(

Изображение пользователя derugu.

Конечно, Kylix

Я ещё написал и смотрел - чё то не то... Хороший Kylix, но на современных ядрах в Линуксе не идет, говорят. Спасибо, исправил. :)
В NetBeans мне понравилось то, что можно в любой ОС скомпилировать проект для иной ОС, в Qt надо три операционки содержать (но у меня они все есть). А Лазарус я пробовал, не смог победить русский язык до конца. Да и попрактиковаться на Си давно хотел. Хотя, может, ещё и вернусь на Лазарус, вон, там у них написано, что хотя и не полностью совместим с Дельфи, зато кроссплатформенный и может свои проекты компилить во все ОС.

Изображение пользователя Школяр.

В этом вся пруха

что несмотря на полную свободность и (как и у Delphi) кажущуюся простоту, Lazarus мощный и гибкий инструмент для программиста. Осваивать его в промышленных масштабах не дает, возможно, снобизм сишников. Но в школе - просто самое то, что надо.

Изображение пользователя derugu.

К сожалению, для школы лучше именно Delphi

поскольку в Delphi консольное приложение абсолютно пустая заготовка, и в нём циклы разные крутить - одно удовольствие. А в Lazarus-e консольное приложение 5 метров, дети его портят на раз, поэтому - простой Geany в Альте. Я испытывал множество Паскаль-IDE, причём Lazarus был первым (точнее, вторым, первым кандидатом был Kylix), но... Об этом я писал
http://www.linformatika.ru/content/zauskaem_abcpascal_v_wine_terminalnyi...

Изображение пользователя Школяр.

Для консольных приложений

на паскале под Linux существует великолепный Free Pascal с его оболочкой a-la Турбо Паскаль (ИМХО, естественно). А Lazarus это все-таки для визуального интерфейса пользователя.